Установка мод wsgi для Python3 на Ubuntu

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

я получил 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: нет, он не использует pip, а не 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, я получаю:

pi@PiDroplet:~$ cd web/piFlask

pi@PiDroplet:~/web/piFlask$ source ./venv3/bin/activate
(venv3)
pi@PiDroplet:~/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)
pi@PiDroplet:~/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: но теперь у меня есть приходите полностью unstuck, пытаясь следовать его инструкциям: у меня нет /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

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

2 ответов


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

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

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

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

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


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

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

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

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

в моем случае мой ./venv3 находится в папке моей колбы. И единственная цель mod_wsgi должен иметь Apache route 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