Где WSGIPythonPath указывает мой виртуальный?

У меня есть папка с именем python2.7 внутри lib в виртуальной среде.

Прочитав полдюжины учебных пособий, я не могу точно определить, что я должен указать на WSGIPythonPath. Я видел некоторые, указывающие на site-packages, но некоторые из них были разделены двоеточием :.

Syntax error on line 1019 of /etc/httpd/conf/httpd.conf:
WSGIPythonPath cannot occur within <VirtualHost> section

Где должна быть WSGIPythonPath в моем virtualenv?

Ответ 1

Вы получаете ошибку, потому что WSGIPythonPath Директива не может использоваться внутри контекста VirtualHost. Вы должны объявить его в своем главном файле конфигурации Apache. Если вы все же хотите указывать на каталоги в своем виртуальном пространстве внутри контекста VirtualHost, используйте вместо этого директиву WSGIDaemonProcess, у него есть опция пути python для объявления ваших соответствующих каталогов на python.

Например: ваш файл конфигурации виртуального хоста должен выглядеть примерно так:

<VirtualHost *:80>
ServerName example.com
CustomLog logs/example.com-access_log common
ErrorLog logs/example.com-error_log

WSGIDaemonProcess example.com python-path=/virtualenvpathto/site-packages:/pathto/exampleprojecthome
WSGIProcessGroup example.com

...
</VirtualHost>

Полный двоеточие : используется, когда у вас есть несколько каталогов на основе python, которые вы хотите добавить в переменную среды $PYTHON_PATH, чтобы сказать, что import example.foo отлично работает, В приведенном выше примере есть два каталога, они могут быть более или менее в зависимости от того, как вы настроили свой проект.

Если вы находитесь в окнах, используйте точку с запятой; вместо полного толстого кишечника.

Надеюсь, это поможет.

Ответ 2

tl;dr: используйте WSGIDaemonProcess python-home=…. Альтернативы с использованием WSGIPythonPath или WSGIDaemonProcess python-path=…-path вместо -home!) больше не рекомендуются.

Старый и новый способ

Как упомянуто @kaykae, WSGIPythonPath нельзя использовать в контексте VirtualHost, но WSGIDaemonProcess python-path=… является эквивалентом. Однако, хотя это все еще может работать, это больше не рекомендуемый способ настройки Apache mod_wsgi с виртуальными средами Python:

Обратите внимание, что предыдущая практика заключалась в том, что эти способы задания пути поиска модуля Python [а именно WSGIDaemonProcess …python-path=… и WSGIPythonPath] использовались для указания местоположения виртуальной среды Python. В частности, они были использованы для добавления site-packages directory виртуальной среды Python. Вы не должны этого делать.

Лучший способ указать местоположение виртуальной среды Python - использовать опцию python-home директивы WSGIDaemonProcess для режима демона или директиву WSGIPythonHome для встроенного режима. Эти способы указания виртуальной среды Python были доступны, так как mod_wsgi 3.0 и дистрибутивы Linux не выпускали такую старую версию mod_wsgi в течение достаточно долгого времени. Если вы используете старый способ, обновите свои конфигурации.

(Source: WSGI Docs: User Guides: Virtual Environments)

Как это сделать по-новому

Тот факт, что вы пытаетесь настроить mod_wsgi внутри контекста VirtualHost, показывает, что вы используете версию конфигурации "режим демона". Согласно приведенной выше цитате, рекомендованным способом включения вашей среды virtualenv в путь Python будет такой раздел в разделе VirtualHost (хотя он также может быть определен снаружи, так как на него можно ссылаться с помощью myapp1 идентификатор выбранной группы процессов демона):

<IfModule mod_wsgi.c>
  WSGIDaemonProcess myapp1 user=user1 group=group1 threads=5 
python-home=/path/to/project/venv
</IfModule>

Обратите внимание, что /path/to/project/venv - это базовый путь вашей среды virtualenv. Это будет подкаталог venv в каталоге, в который вы вызвали virtualenv venv для его создания.

Также обратите внимание, что вы можете добавить другие пути к вашему пути Python, чтобы ваши операторы import работали для пакетов, не управляемых через PIP или аналогичные. Например, вы можете добавить python-path=/path/to/project. Только не используйте этот механизм, чтобы сообщить wsgi обо всей настройке virtualenv - для этого они представили python-home.

Ответ 3

Вот официальная документация: https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/#using-a-virtualenv

Использование virtualenv¶

Если вы устанавливаете свои проекты зависимостей Python внутри virtualenv, вам нужно добавить путь к этим сайтам-сайтам virtualenvs каталог на ваш путь Python. Для этого добавьте дополнительный путь к вашей директиве WSGIPythonPath, разделенный несколькими путями двоеточие (:) если используется UNIX-подобная система или точка с запятой (;) if используя Windows. Если какая-либо часть пути каталога содержит пробел символа, полная строка аргумента WSGIPythonPath должна быть цитировал:

> WSGIPythonPath
> /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages

Убедитесь, что вы указали правильный путь к вашему виртуальному файлу, и замените python3.X с правильной версией Python (например, python3.4).