2015-06-05 5 views
7

Может ли кто-нибудь дать мне четкий набор инструкций по установке mod_wsgi на Ubuntu для Python 3?Установка mod_wsgi для Python3 на Ubuntu

Я получил Flask & mod_wsgi успешно используя Python3, и на короткое мгновение почувствовал себя счастливым.

... пока я не смотрел на журнал Apache и понял, что я столкнулся с этой проблемой: https://askubuntu.com/questions/569550/assertionerror-using-apache2-and-libapache2-mod-wsgi-py3-on-ubuntu-14-04-python

apt-get устанавливает устаревшую версию libapache2-mod-wsgi-py3 и это приводит к возникновению ошибок в журнале Apache. (Должен ли я сообщить об этом, и если да где?)

В связи с этим инженер использует pip для установки более современной версии.

Интересно, что он, кажется, устанавливает его в виртуальную среду Python3. (Будет ли это быть иначе, чем при использовании системы pip3?)

Кроме того, он использует pip3 install mod_wsgi, но pip3 search mod_wsgi возвращается:

(EDIT: нет, он не делает, он использует пип не PIP3 Может ли это быть правильным. ? есть ли у него есть свои провода пересекли? не пип собирается игнорировать тот факт, что он находится в его py3venv и просто использовать установку py2 системы? Но в любом случае, не устранить путаницу ...)

mod_wsgi-metrics   - Metrics package for Apache/mod_wsgi. 
cykooz.recipe.pastewsgi - Buildout recipe to create paste.deploy entry points for mod_wsgi or uwsgi 
mod_wsgi-httpd   - Installer for Apache httpd web server. 
apachemiddleware   - Useful Python middleware for use with mod_wsgi deployments 
tranchitella.recipe.wsgi - Buildout recipe to create paste.deploy entry points for mod_wsgi 
mod_wsgi     - Installer for Apache/mod_wsgi. 

Итак, что такое mod_wsgi-httpd? И уверен ли это, что это не тот, который я хочу?

Наконец, может ли кто-нибудь предоставить ссылку на установку mod_wsgi из источника?

EDIT: Я не понимаю, почему инженер использует pip install mod_wsgi, а не pip3 .... Неужели это не так? Но если я использовать PIP3, я получаю:

[email protected]:~$ cd web/piFlask 

[email protected]:~/web/piFlask$ source ./venv3/bin/activate 
(venv3) 
[email protected]:~/web/piFlask$ pip3 install mod_wsgi 
Downloading/unpacking mod-wsgi 
    Downloading mod_wsgi-4.4.12.tar.gz (991kB): 991kB downloaded 
    Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py) egg_info for package mod-wsgi 
    Traceback (most recent call last): 
     File "<string>", line 17, in <module> 
     File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module> 
     'missing Apache httpd server packages.' % APXS) 
    RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages. 
    Complete output from command python setup.py egg_info: 
    Traceback (most recent call last): 

    File "<string>", line 17, in <module> 

    File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py", line 141, in <module> 

    'missing Apache httpd server packages.' % APXS) 

RuntimeError: The 'apxs' command appears not to be installed or is not executable. Please check the list of prerequisites in the documentation for this package and install any missing Apache httpd server packages. 

---------------------------------------- 
Cleaning up... 
Command python setup.py egg_info failed with error code 1 in /home/pi/web/piFlask/venv3/build/mod-wsgi 
Storing debug log for failure in /home/pi/.pip/pip.log 

И теперь я стараюсь pip3 install mod_wsgi-httpd, это занимает около пяти минут, чтобы собрать:

(venv3) 
[email protected]:~/web/piFlask$ pip3 install mod_wsgi-httpd 
Downloading/unpacking mod-wsgi-httpd 
    Downloading mod_wsgi-httpd-2.4.12.5.tar.gz 
    Running setup.py (path:/home/pi/web/piFlask/venv3/build/mod-wsgi-httpd/setup.py) egg_info for package mod-wsgi-httpd 
    apr-1.5.2/ 
    apr-1.5.2/config.layout 
    apr-1.5.2/build.conf 
    apr-1.5.2/emacs-mode 
    : 

Так что теперь я волнуюсь, у меня второй Apache сидит в моем Py3 virtualenv.

Однако это избавляет от ошибки; pip3 install mod_wsgi сейчас завершается успешно.

EDIT: но теперь я полностью отклеился, пытаясь следовать его инструкциям: у меня нет /etc/apache2/mods-available/wsgi_express.load, и если он предлагает сделать это, то для начала это кажется произвольным, а во-вторых, текст, который он предлагает, в нем, то есть LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so - этот файл не существует в моей системе.

У меня есть /etc/apache2/mods-available/wsgi.load

снова утонуть в технологии, кто-то может бросить меня линию?

ответ

4

Если они активировали виртуальную среду Python 3, и ее каталог bin находился там, но, скорее всего, они могли просто запустить «pip», а не «pip3». Вы должны запустить 'which pip', чтобы проверить, поступает ли она из ожидаемой виртуальной среды.

Пакет 'mod_wsgi-httpd' специально предназначен для установки отдельного экземпляра самого Apache, чтобы обойти проблемы, в которых системный сервер Apache устарел или отсутствует файлы заголовков разработки, или иным образом не может изменять конфигурацию всей системы , Это, как правило, более актуально, если у вас нет доступа root для исправления системных проблем, и их интересует только работающий на непривилегированном порту и поэтому не нужен root-доступ. Вам также придется использовать «mod_wsgi-express» из пакета «mod_wsgi», который был «pip» установлен после установки «mod_wsgi-httpd», поскольку это единственный способ использования установленной версии mod_wsgi-httpd версии Apache ,

Итак, для 'mod_wsgi-httpd' вы действительно хотели бы игнорировать его. Если вы уже установили его, тогда «pip» удалите его и «mod_wsgi». Последнее необходимо удалить, поскольку оно будет связано с версией Apache версии mod_wsgi-httpd, а mod_wsgi.so не будет работать с системой в целом.

Что касается отдельных шагов пользователей в ссылке, они выглядят правильно, хотя я бы сказал, что на шаге 3, следует подчеркнуть, что быть добавлены в LoadModule и WSGIPythonHome линии, что выводится при выполнении команды mod_wsgi-express install-module. Что такое выход, настроен так, чтобы соответствовать вашей установке. Так что не составляйте значения, просто используйте то, что выдает эта команда.

Если у вас есть файл wsgi.load, запустите sudo a2dismod wsgi, чтобы избавиться от него или иным способом удалить его вручную. Это осталось от старой системы mod_wsgi.

+0

Я удалил '' mod_wsgi' и mod_wsgi-httpd' использованием пипс. Теперь я застрял. Если я 'pip install mod_wsgi', я получаю ту же ошибку, что и в моем сообщении, где я пытаюсь« pip3 ... ».единственное, что я могу придумать, - использовать системный диск для установки, в надежде, что я найду систему Apache ...? –

+1

Извините, полностью упустил проблему с apxs. Это связано с тем, что вы не установили соответствующий пакет «dev» для Apache из репозиториев пакетов Ubuntu. То, что это требуется, упоминается на странице PyPi для mod_wsgi. Без этого пакета вам не удастся заголовочные файлы Apache и его инструмент сборки, называемый «apxs». –

+0

Я нашел страницу https://pypi.python.org/pypi/mod_wsgi - это разочаровывает, потому что она говорит * «Например, ..., если вы использовали Apf prefork MPM, вам понадобится ... Если вместо этого вы использовали MPM Apache, вам понадобится ... »* Но я никогда не слышал об этих условиях. Это разные ароматы Apache? Так почему-то я должен выяснить, какой вкус имеет мой Apache и какой будет соответствующий файл dev ...? –

12

Я намереваюсь этот ответ как «примечание к себе, которое может быть полезным для других».

apt-get в момент написания устаревшей версии mod_wsgi.

pip устанавливает обновленную версию. Он делает это, загружая исходный код и компилируя его.

Настройте виртуальный виртуальный диск Python3 и активируйте его с помощью source ./venv3/bin/activate, убедитесь, что which pip подтверждает, что теперь использует эту среду. Похоже, что pip и pip3 взаимозаменяемы.

В моем случае мой ./venv3 находится в моей папке с флягой. И единственной целью mod_wsgi является использование Apache-маршрута http://myfoo.org/flask запросов к моему флеш-приложению. Поэтому имеет смысл установить mod_wsgi в этот venv3.

Однако для pip, чтобы успешно скомпилировать его, мне сначала нужно sudo apt-get install apache2-dev, который предоставляет необходимые файлы заголовков. Затем мне потребовалась перезагрузка. Затем pip install mod_wsgi завершает все в порядке.

Затем, следуя инструкциям из оригинальной ссылке:

(venv3) 
$ sudo venv3/bin/mod_wsgi-express install-module 
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi-py34.cpython-34m.so 
WSGIPythonHome /home/pi/web/piFlask/venv3 

Тогда я должен создать /etc/apache2/mods-available/wsgi_express.{load,conf}, содержащие эти 2 строки соответственно.

Наконец включить модуль и проверить журнал ошибок сервера Apache:

a2enmod wsgi 
sudo service apache2 restart 
cat /var/log/apache2/error.log 
+2

'sudo apt-get install apache2-dev', тогда' pip install mod_wsgi' было все, что мне нужно было сделать; не требуется перезагрузка – Nick

+0

'a2enmod wsgi' не должен работать в соответствии с вашими инструкциями. 'a2enmod wsgi_express' будет. –

Смежные вопросы