2015-06-01 25 views
10

Mój pierwszy wpis, a ja jestem nowy zarówno w Pythonie, jak i Apache, więc proszę, nie krępuj się. Mam aplikację internetową Python w środowisku conda, która wyświetla zawartość dobrze, używając Flask. Teraz muszę służyć wszystkim z Apache zamiast z Flask. Mogę zmusić Apache do uruchomienia Pythona za pomocą mod_wsgi, ale tylko z virtualenv. Próbowałem zainstalować virtualenv z Anacondą, ale otrzymałem ostrzeżenie, że taka konfiguracja nie jest obsługiwana i nie jest zalecana. Więc moje pytanie jest następujące:Jak używać środowiska conda z mod_wsgi?

Jak skonfigurować Apache do uruchamiania aplikacji w środowisku conda?

Here, istnieje sekcja dotycząca pracy ze środowiskami wirtualnymi i mówi, że muszę wprowadzić linię do mojego pliku WSGG, pokazującą gdzie znaleźć activ_this.py. Virtualenv wirtualne środowisko ma activate_this.py, ale środowisko conda nie. Wygląda na to, że bez odpowiednich instrukcji aktywacji środowiska wirtualnego pojawia się błąd 500 w mojej przeglądarce i "Błąd importu: brak modułu o nazwie kolba" w moim httpd error_log.

Jest to w moim pliku httpd.conf:

<VirtualHost *:80> 
    DocumentRoot /var/www 
    WSGIScriptAlias/var/www/tsm.wsgi 
    <Directory /var/www/tsm> 
    Order allow,deny 
    Allow from all 
    </Directory> 
</VirtualHost> 

A oto tsm.wsgi:

import sys 
import site 
site.addsitedir('~/.conda/envs/tsm/lib/python2.7/site-packages') 
sys.path.insert(0, '/var/www/tsm/server/time_series_machine') 
sys.stdout = sys.stderr 
from app import app as application 

Jakieś pomysły? Dziękuję za pomoc, którą możesz udzielić.

Odpowiedz

1

Twoje mod_wsgi musiałoby być skompilowane z Anacondą Python na początek, a nie z twoim systemem Python. Innymi słowy, nie można używać pakietów mod_wsgi dostarczonych przez system, ale trzeba je skompilować samodzielnie. Następnie wykonaj to, co mówi się:

to znaczy użyć trybu demona i skorzystać z opcji python-home do WSGIDaemonProcess.

Należy zauważyć, że pojawiły się doniesienia sugerujące, że Anaconda Python jest w jakiś sposób uszkodzona i nie będzie działać z systemami, które chcą osadzić w Pythonie. Więc może i tak nie działać.

BTW, nie można użyć "~" w ścieżce w pliku skryptu WSGI tak czy inaczej w sposób, w jaki to robiłeś. Nie zostanie rozszerzony na katalog domowy. Ale potem idź za tym postem i nie będziesz tego potrzebować.

+1

Dzięki! Myślę ... Myślę, że to naprawiło. Występują teraz inne błędy, ale myślę, że mam serwer Apache używający mod_wsgi w środowisku conda. Pobrałem mod_wsgi, pobrałem kod źródłowy, źródło aktywowało moje środowisko conda, skompilowałem i zainstalowałem z "python setup.py install", a następnie uruchomiłem serwer z serwerem startowym mod_wsgi-express w wersji 0.0.0.0:8080. Widziałem tę stronę ... węża w butelce? Ale teraz, gdy próbuję załadować konkretny plik .py, pojawia się następujący błąd: – Nathaniel

+1

Niestety, naciśnij enter zamiast shift-enter, a następnie zajęło zbyt dużo czasu, aby poprawić moją odpowiedź. W każdym razie, myślę, że to działa; Właśnie dostaję inny błąd teraz, gdy próbuję uruchomić prosty helloWorld.py i na tym popracuję, zadaję kolejne pytanie później, jeśli nie mogę tego rozgryźć. Dzięki jeszcze raz. – Nathaniel

7

Jestem spóźniony na przyjęcie, ale miałem ten sam problem. Na co warto, nie mam nic do rekompilacji i był w stanie uzyskać to do pracy w tym coś takiego w mojej konfiguracji wirtualnego hosta za pomocą systemu zainstalowanego na mod_wsgi:

WSGIDaemonProcess mysite python-path=/path/to/anaconda2/lib/python2.7/site-packages 

Zauważ, że to wskazuje na site-packages katalogu.

2

Aby dodać odpowiedź @ Dino, można również zainstalować mod_wsgi do swojego głównego Conda środowiska:

# Instal `mod_wsgi` 
$ pip install mod_wsgi 

# Find the full path to installed `mod_wsgi` 
$ which mod_wsgi-express 

# Install and register the `mod_wsgi` module with Apache 
$ sudo /full/path/to/installed/mod_wsgi-express install-module 

Następnie można utworzyć środowisk Conda dla wielu stron:

# Create 3 conda environments 
conda create -n mysite1 python django 
conda create -n mysite2 python django 
conda create -n mysite3 python django 

i ustawić WSGIDaemonProcess w plik konfiguracyjny strony Apache do korzystania z odpowiedniego środowiska dla każdej witryny:

# /etc/apache2/sites-enabled/mysite1.conf 
WSGIDaemonProcess mysite1 python-path=/path/to/anaconda3/envs/mysite1/lib/python3.5/site-packages 

# /etc/apache2/sites-enabled/mysite2.conf 
WSGIDaemonProcess mysite2 python-path=/path/to/anaconda3/envs/mysite2/lib/python3.5/site-packages 

# /etc/apache2/sites-enabled/mysite3.conf 
WSGIDaemonProcess mysite3 python-path=/path/to/anaconda3/envs/mysite3/lib/python3.5/site-packages 
+0

@ graham-dumpleton Czy możesz podać wyjaśnienie zmiany? Wypróbowałem to na lokalnym komputerze i dostałem błędy w moim pliku rejestru apache, mówiąc: 'ImportError: Brak modułu o nazwie" django''. – ostrokach

+0

Używanie '' python-path'' do odnoszenia się do '' site-packages'' nie jest najlepszą praktyką. Zamiast tego należy użyć opcji '' python-home'', aby odnieść się do początku środowiska wirtualnego Python. Odwołując się do '' site-packages'' można ukryć różne problemy, na przykład, czy twoje mod_wsgi są kompilowane dla innej wersji lub instalacji Pythona. http://blog.dscpl.com.au/2014/09/using-python-virtual-environments-with.html –