在Ubuntu上安装Python3的mod_wsgi
有谁能给我一套关于在Ubuntu for Python 3上安装mod_wsgi的清晰说明吗 我确实成功地使用Python3获得了Flask&mod_wsgi,并有一小会儿感到很高兴 …直到我查看Apache的日志并意识到我遇到了这个问题:在Ubuntu上安装Python3的mod_wsgi,ubuntu,python-3.x,pip,virtualenv,mod-wsgi,Ubuntu,Python 3.x,Pip,Virtualenv,Mod Wsgi,有谁能给我一套关于在Ubuntu for Python 3上安装mod_wsgi的清晰说明吗 我确实成功地使用Python3获得了Flask&mod_wsgi,并有一小会儿感到很高兴 …直到我查看Apache的日志并意识到我遇到了这个问题: apt get正在安装一个过时版本的libapache2-mod-wsgi-py3,这会导致Apache日志中出现错误。(我应该报告吗?如果是,在哪里?) 在链接中,工程师正在使用pip安装更为更新的版本 有趣的是,他似乎正在把它安装到一个虚拟的Python
apt get
正在安装一个过时版本的libapache2-mod-wsgi-py3
,这会导致Apache日志中出现错误。(我应该报告吗?如果是,在哪里?)
在链接中,工程师正在使用pip
安装更为更新的版本
有趣的是,他似乎正在把它安装到一个虚拟的Python3环境中。(这与使用系统pip3
有什么不同吗?)
他还使用pip3安装mod_wsgi
,但pip3搜索mod_wsgi
返回:
(编辑:不,他没有,他使用的是pip而不是pip3。这是对的吗?他有没有交叉线?pip不会忽略他在他的py3venv中的事实,而只是使用系统的py2安装吗?但无论如何,这并不能解决困惑…)
那么什么是mod_wsgi-httpd
?这肯定不是我想要的吗
最后,有人能从源代码提供安装mod_wsgi的链接吗
编辑:我不明白工程师为什么使用pip安装mod\u 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
所以现在我担心我的Py3 virtualenv中还有第二个Apache
然而,这确实消除了错误pip3安装mod_wsgi
现在成功完成
编辑:但现在我完全没有按照他的指示去做:我没有可用的/etc/apache2/mods/wsgi_express.load
,如果他建议制作,那么首先这似乎是任意的,其次是他建议放入的文本,例如,LoadModule wsgi\u module/usr/lib/apache2/modules/modules\u wsgi-py34.cpython-34m。因此
——我的系统上不存在此文件
我确实有/etc/apache2/mods可用/wsgi.load
又一次沉溺于技术,有人能给我一句话吗?如果他们激活了Python 3虚拟环境,并且其bin目录位于路径中,那么他们可能只需运行“pip”而不是“pip3”。您应该运行“which pip”来验证它是否来自您期望的虚拟环境 “mod_wsgi-httpd”包专门用于安装Apache自身的独特实例,以解决系统范围内Apache过时或缺少开发头文件,或者无法修改系统范围配置的问题。当您没有根访问权限来修复系统范围内的问题,并且只对在非特权端口上运行感兴趣,因此不需要根访问权限时,它通常更具相关性。您还必须使用“mod_wsgi”包中的“mod_wsgi-express”,该包是在安装“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
文件,请运行sudoa2dismod wsgi
将其删除,或者手动将其删除。这是旧系统打包mod_wsgi的遗留问题。我打算将此答案作为“自我提示,可能对其他人有用”
apt get
在撰写本文时安装了一个过时版本的mod_wsgi
pip
安装最新版本。它通过下载源代码并编译来实现这一点
设置Python3 virtualenv并使用源代码/venv3/bin/activate
激活它,验证哪个pip
确认它现在正在使用此环境。看来pip和pip3是可互换的
在我的情况下,我的/venv3
在我的烧瓶文件夹中。而mod_wsgi
的唯一目的就是让Apache路由http://myfoo.org/flask
对我的烧瓶应用程序的请求。因此,将mod_wsgi
安装到这个venv3
中是有意义的
然而,为了成功编译
pip
,我首先需要sudo-apt-get-install-apache2-dev
,它提供了必要的头文件。然后我需要重新启动。然后pip安装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}
,分别包含这两行
最后启用模块并检查Apache的错误日志:
a2enmod wsgi
sudo service apache2 restart
cat /var/log/apache2/error.log
我已经使用pip删除了
mod_wsgi
和mod_wsgi-httpd
。现在我被卡住了。如果我pip安装mod_wsgi
我会收到与我的帖子中相同的错误,我正在尝试pip3…
。我唯一能想到的是使用系统pip进行安装,希望我的系统能够找到Apache…?对不起,完全忽略了apxs问题。这是因为您尚未从Ubuntu软件包存储库中为Apache安装适当的“dev”软件包。mod_wsgi的PyPi页面中提到了这一点。没有那个包裹,你会被想念的
(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
a2enmod wsgi
sudo service apache2 restart
cat /var/log/apache2/error.log