Как использовать среду conda с mod_wsgi?

Мой первый пост, и я новичок как в Python, так и в Apache, поэтому, пожалуйста, успокойся. У меня есть веб-приложение Python в среде conda, которая поддерживает содержимое только с помощью Flask. Теперь мне нужно обслуживать все с Apache вместо Flask. Я могу заставить Apache запускать Python с mod_wsgi, но только с virtualenv. Я попытался установить virtualenv с Anaconda, но я получил предупреждение о том, что такая настройка не поддерживается и не рекомендуется. Поэтому мой вопрос таков:

Как настроить Apache для запуска моего приложения в среде conda?

Здесь, есть раздел по работе с виртуальными средами, и он говорит, что мне нужно ввести строку в мой файл wsgi, где показано, где найти activate_this.py. Виртуальная виртуальная среда virtualenv имеет функцию activate_this.py, но среда конды не работает. Похоже, что без правильных инструкций по активации виртуальной среды я просто получаю ошибку 500 в своем браузере и "Ошибка импорта: нет модуля с именем flask" в моем httpd error_log.

Это в моем файле httpd.conf:

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

И вот 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

Любые идеи? Спасибо за любую помощь, которую вы можете предоставить.

Ответ 1

Ваш mod_wsgi необходимо скомпилировать с помощью Anaconda Python для начала, а не для вашей системы Python. Другими словами, вы не можете использовать поставляемые системой пакеты mod_wsgi, но вам нужно будет скомпилировать его самостоятельно. Затем следуйте указаниям:

То есть, используйте режим демона и используйте параметр python-home для WSGIDaemonProcess.

Заметьте, что были сообщения о том, что Anaconda Python каким-то образом сломается и не будет работать с системами, которые хотят встроить Python. Так что все равно не получится.

Кстати, вы не можете использовать '~' в пути в вашем файле WSGI script в любом случае с тем, как вы это делали. Он не будет расширен как домашний каталог. Но тогда, следуйте за этим сообщением, и вам это не понадобится.

Ответ 2

Я опаздываю на вечеринку, но у меня такая же проблема. Для чего я не должен был перекомпилировать что-нибудь и смог заставить это работать, включив что-то вроде этого в мою конфигурацию VirtualHost, используя установленный системой mod_wsgi:

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

Обратите внимание, что это указывает на каталог site-packages.

Ответ 3

Чтобы добавить к ответу @dino, вы также можете установить mod_wsgi в корневую среду conda:

# 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

Затем вы можете создавать среды конда для нескольких сайтов:

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

И установите WSGIDaemonProcess в файле конфигурации сайта Apache, чтобы использовать соответствующую среду для каждого сайта:

# /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