有谁能给予我一套在Ubuntu for 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-pythonapt-get
正在安装libapache2-mod-wsgi-py3
的过期版本,这会导致Apache日志中出现错误。(我应该报告此问题吗?如果应该报告,在哪里报告?)
在链接中,工程师使用pip
安装更新的版本。
有趣的是,他似乎将其安装到了一个虚拟的Python3环境中(这与使用pip3
系统有什么不同吗?)
他还使用了pip3 install mod_wsgi
,但pip3 search mod_wsgi
返回:
- (编辑:不,他没有,他用的是pip而不是pip 3。这是对的吗?他是不是搞错了?pip是不是打算无视他在py 3venv中的事实,而直接使用系统的py 2安装?但无论如何,这并不能解决混乱...)*
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的链接吗?
编辑:我不明白为什么工程师使用pip install mod_wsgi
而不是pip3 ...
。这肯定不对吧?但是如果我使用pip 3,我会得到:
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
:
所以现在我担心我的Py 3虚拟环境中有第二个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
又沉迷于科技了,谁能给我扔一条线?
3条答案
按热度按时间yrdbyhpb1#
我打算把这个答案作为“给自己的一个提示,也许对别人有用”。
apt-get
在编写时安装了mod_wsgi
的过期版本。pip
安装最新版本。它通过下载源代码并编译来完成此操作。设置一个Python3 virtualenv并使用
source ./venv3/bin/activate
激活它,验证which pip
是否确认它现在正在使用此环境。pip和pip3似乎可以互换。在我的例子中,我的
./venv3
在我的flask文件夹中。mod_wsgi
的唯一用途是让Apache将http://myfoo.org/flask
请求路由到我的flask应用程序。因此,将mod_wsgi
安装到这个venv3
中是有意义的。然而,为了成功编译
pip
,我首先需要sudo apt-get install apache2-dev
提供必要的头文件。然后我需要重新启动。然后pip install mod_wsgi
就可以完成了。然后按照原始链接中的说明进行操作:
然后我必须创建分别包含这两行的
/etc/apache2/mods-available/wsgi_express.{load,conf}
。最后,启用模块并检查Apache的错误日志:
7xzttuei2#
如果他们已经激活了Python 3虚拟环境,并且它的bin目录在那里的路径中,那么很可能他们可以简单地运行'pip'而不是'pip 3'。你应该运行'which pip'来验证它是否来自你期望的虚拟环境。
“mod_wsgi-httpd”包专门用于安装Apache本身的不同示例,以解决系统范围内Apache过时或缺少开发头文件的问题,或以其他方式无法修改系统范围的配置。通常,当您不使用“您没有root访问权限来修复系统范围的问题,并且只对在非特权端口上运行感兴趣,因此不需要root访问权限。您还必须使用'mod_wsgi-express'从“mod_wsgi”软件包(在安装“mod_wsgi-httpd”之后“pip”安装),因为这是使用“mod_wsgi-httpd”安装的Apache版本的唯一方法。
因此,对于'mod_wsgi-httpd',您真的希望忽略它。如果您已经安装了它,那么'pip'卸载它和'mod_wsgi'。后者需要卸载,因为它将绑定到'mod_wsgi-httpd' Apache版本,而'mod_wsgi. so'将无法在系统范围内工作。
至于链接中的单独用户步骤,它们看起来是正确的,尽管我会说在步骤3中,应该强调要添加的
LoadModule
和WSGIPythonHome
行是运行mod_wsgi-express install-module
命令时的输出。输出是定制的,以匹配您的安装应该是什么。所以不要虚构值,只要使用该命令的输出。如果你有一个
wsgi.load
文件,运行sudo a2dismod wsgi
来删除它,或者手动删除它。它是旧系统包mod_wsgi遗留下来的。omhiaaxx3#
当我在终端中输入
apxs
时,它说可以使用以下命令安装该命令:sudo apt install apache2-dev
而且成功了!