在 Ubuntu 上为 Python3 安装 mod_wsgi
Installing mod_wsgi for Python3 on Ubuntu
谁能给我一套关于在 Ubuntu 上为 Python 3 安装 mod_wsgi 的清晰说明?
我确实使用 Python3 成功地获得了 Flask 和 mod_wsgi,并且有那么一瞬间感到很高兴。
...直到我查看 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 日志中出现错误。 (我应该报告这个吗?如果是的话在哪里?)
在 link 中,工程师正在使用 pip
安装更新的版本。
有趣的是,他似乎将其安装到虚拟 Python3 环境中。 (这与使用系统 pip3
有什么不同吗?)
他也用pip3 install mod_wsgi
,但是pip3 search mod_wsgi
returns:
(编辑:不,他没有,他使用的是 pip 而不是 pip3。对吗?他的电线交叉了吗?pip 不会忽略他在他的 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
?确定这不是我想要的吗?
最后,任何人都可以提供 link 从源安装 mod_wsgi 吗?
编辑:我不明白为什么工程师使用 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
:
所以现在我担心我的 Py3 virtualenv 中有第二个 Apache。
然而,这确实消除了错误; pip3 install mod_wsgi
现在成功完成。
编辑:但现在我完全无法按照他的指示去做:我没有 /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
又被技术淹没了,谁能给我发个信息?
如果他们激活了 Python 3 虚拟环境并且它的 bin 目录在该路径中,那么他们可能只需 运行 'pip' 而不是 'pip3'。您应该 运行 'which pip' 验证它是否来自您期望的虚拟环境。
'mod_wsgi-httpd' 软件包专门用于安装 Apache 本身的不同实例,以解决系统范围的 Apache 已过时或缺少开发头文件或无法修改系统范围的问题配置。当您没有 root 访问权限来修复系统范围的问题并且只对非特权端口上的 运行ning 感兴趣,因此不需要 root 访问权限时,它通常更相关。您还必须使用 'mod_wsgi' 软件包中的 'mod_wsgi-express',该软件包是 'pip' 在安装 'mod_wsgi-httpd' 之后安装的,因为这是使用 'mod_wsgi-httpd' 的唯一方法安装的 Apache 版本。
因此,对于 'mod_wsgi-httpd',您真的很想忽略它。如果您已经安装了它,那么 'pip' 卸载它和 'mod_wsgi'。后者需要卸载,因为它将绑定到 'mod_wsgi-httpd' Apache 版本,而 'mod_wsgi.so' 将无法在系统范围内使用。
至于 link 中的用户分离步骤,它们看起来是正确的,尽管我会说在第 3 步中,应该强调 LoadModule
和 WSGIPythonHome
行添加的是 运行ning mod_wsgi-express install-module
命令时的输出。输出的内容是定制的,以匹配您的安装应该是什么。所以不要编造值,只需使用该命令输出的内容即可。
如果您还有 wsgi.load
文件,运行 sudo a2dismod wsgi
删除它或以其他方式手动删除它。它是旧系统打包后遗留下来的 mod_wsgi.
我打算将此答案作为 "note to self that may be of use to others"。
apt-get
在撰写本文时安装了 mod_wsgi
.
的过时版本
pip
安装最新版本。它通过下载源代码并编译它来实现。
设置一个 Python3 virtualenv 并用 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
完成 okay.
然后按照原文link的说明:
(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}
分别包含这两行。
最后启用模块并查看Apache的错误日志:
a2enmod wsgi
sudo service apache2 restart
cat /var/log/apache2/error.log
谁能给我一套关于在 Ubuntu 上为 Python 3 安装 mod_wsgi 的清晰说明?
我确实使用 Python3 成功地获得了 Flask 和 mod_wsgi,并且有那么一瞬间感到很高兴。
...直到我查看 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 日志中出现错误。 (我应该报告这个吗?如果是的话在哪里?)
在 link 中,工程师正在使用 pip
安装更新的版本。
有趣的是,他似乎将其安装到虚拟 Python3 环境中。 (这与使用系统 pip3
有什么不同吗?)
他也用pip3 install mod_wsgi
,但是pip3 search mod_wsgi
returns:
(编辑:不,他没有,他使用的是 pip 而不是 pip3。对吗?他的电线交叉了吗?pip 不会忽略他在他的 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
?确定这不是我想要的吗?
最后,任何人都可以提供 link 从源安装 mod_wsgi 吗?
编辑:我不明白为什么工程师使用 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
:
所以现在我担心我的 Py3 virtualenv 中有第二个 Apache。
然而,这确实消除了错误; pip3 install mod_wsgi
现在成功完成。
编辑:但现在我完全无法按照他的指示去做:我没有 /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
又被技术淹没了,谁能给我发个信息?
如果他们激活了 Python 3 虚拟环境并且它的 bin 目录在该路径中,那么他们可能只需 运行 'pip' 而不是 'pip3'。您应该 运行 'which pip' 验证它是否来自您期望的虚拟环境。
'mod_wsgi-httpd' 软件包专门用于安装 Apache 本身的不同实例,以解决系统范围的 Apache 已过时或缺少开发头文件或无法修改系统范围的问题配置。当您没有 root 访问权限来修复系统范围的问题并且只对非特权端口上的 运行ning 感兴趣,因此不需要 root 访问权限时,它通常更相关。您还必须使用 'mod_wsgi' 软件包中的 'mod_wsgi-express',该软件包是 'pip' 在安装 'mod_wsgi-httpd' 之后安装的,因为这是使用 'mod_wsgi-httpd' 的唯一方法安装的 Apache 版本。
因此,对于 'mod_wsgi-httpd',您真的很想忽略它。如果您已经安装了它,那么 'pip' 卸载它和 'mod_wsgi'。后者需要卸载,因为它将绑定到 'mod_wsgi-httpd' Apache 版本,而 'mod_wsgi.so' 将无法在系统范围内使用。
至于 link 中的用户分离步骤,它们看起来是正确的,尽管我会说在第 3 步中,应该强调 LoadModule
和 WSGIPythonHome
行添加的是 运行ning mod_wsgi-express install-module
命令时的输出。输出的内容是定制的,以匹配您的安装应该是什么。所以不要编造值,只需使用该命令输出的内容即可。
如果您还有 wsgi.load
文件,运行 sudo a2dismod wsgi
删除它或以其他方式手动删除它。它是旧系统打包后遗留下来的 mod_wsgi.
我打算将此答案作为 "note to self that may be of use to others"。
apt-get
在撰写本文时安装了 mod_wsgi
.
pip
安装最新版本。它通过下载源代码并编译它来实现。
设置一个 Python3 virtualenv 并用 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
完成 okay.
然后按照原文link的说明:
(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}
分别包含这两行。
最后启用模块并查看Apache的错误日志:
a2enmod wsgi
sudo service apache2 restart
cat /var/log/apache2/error.log