2011-01-06 19 views
12

Próbuję skonfigurować serwer WAMP. Apache działa poprawnie i zainstalowałem mod_wsgi bez żadnych problemów.Uruchamianie Pythona z virtualenv za pomocą Apache/mod_wsgi, na Windows

Problem polega na tym, że używam środowisk wirtualnych (używając virtualenv) do moich projektów. Najwyraźniej mod_wsgi ma problemy z lokalizacją mojej instalacji Django.

Próbuję zrozumieć, w jaki sposób można uzyskać mod_wsgi do pracy z virtualenvs. Wydaje się, że dokumentacja ta nie jest możliwa:

Należy zauważyć, że dyrektywa WSGIPythonHome może być używana tylko w systemach UNIX i nie jest dostępna w systemach Windows. Wynika to z tego, że w systemach Windows wydaje się, że lokalizacja Pythona DLL jest tym, na czym Python będzie szukał plików biblioteki Pythona. W tym momencie nie wiadomo, w jaki sposób można stworzyć odrębne środowisko bazowe, niezależne od głównej instalacji Pythona w systemie Windows.

Z tego miejsca: mod_wsgi + virtualenv docs.

Czy ktoś ma pomysł, jak to zrobić?

+2

Ten komentarz na temat WSGIPythonHome w systemie Windows jest nieprawidłowy. Ograniczenie zostało zniesione, prawdopodobnie w mod_wsgi 3.X (nie jestem pewien). Komentarz został usunięty. –

Odpowiedz

12

Środowisko można aktywować programowo z Pythona, dodając je do pliku .wsgi przed zaimportowaniem czegokolwiek innego.

Od virtualenv's docs:

Czasami nie mogą lub nie chcą używać interpreter Pythona utworzonego przez virtualenv. Na przykład w środowisku mod_python lub mod_wsgi jest tylko jeden interpreter.

Na szczęście jest to łatwe. Do zainstalowania bibliotek należy użyć niestandardowego interpretera języka Python. Ale aby korzystać z bibliotek, musisz mieć pewność, że ścieżka jest poprawna. Skrypt jest dostępny dla poprawić ścieżkę. Można skonfigurować środowisko jak :

activate_this = '/path/to/env/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 

to zmieni sys.path a nawet zmiany sys.prefix, ale również pozwalają użyć istniejącego tłumacza. Elementy w twoim środowisku pokażą najpierw na sys.path, przed elementami globalnymi. Nie można jednak cofnąć aktywacji innych środowisk lub modułów, które zostały zaimportowane. Użytkownik: nie powinien próbować, na przykład, aktywować środowiska przed żądaniem sieciowym ; powinieneś aktywować jedno środowisko, tak szybko, jak to możliwe, i nie robić tego ponownie w tym procesie.

+0

To wygląda dobrze, wypróbuję to. Ale wygląda na to, że użyje "głównego" intereperetera Pythona w moim systemie, a nie tego, który został stworzony przy użyciu virtualenv, prawda? Oznacza to, że mogę używać tylko jednej wersji Pythona w moim systemie? (To byłby tylko drobny problem). –

+0

Będzie używać wbudowanego interpretera mod_wsgi do apache, ale upewni się, że sys.ścieżka jest poprawnie wypełniona bibliotekami zainstalowanymi w virtualenv – albertov

+2

Wyszukiwarkach - możesz to zobaczyć zaimplementowane tutaj: http://thecodeship.com/deployment/deploy-django-apache-virtualenv-and-mod_wsgi/ w dolnej części pokazuje, jak aktywować i ustawić zmienne ścieżki w pliku wsgi.py – Mendhak