Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ubuntu上安装Python3的mod_wsgi_Ubuntu_Python 3.x_Pip_Virtualenv_Mod Wsgi - Fatal编程技术网

在Ubuntu上安装Python3的mod_wsgi

在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

有谁能给我一套关于在Ubuntu for Python 3上安装mod_wsgi的清晰说明吗

我确实成功地使用Python3获得了Flask&mod_wsgi,并有一小会儿感到很高兴

…直到我查看Apache的日志并意识到我遇到了这个问题:

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