首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ubuntu上安装mod_wsgi for Python3

在Ubuntu上安装mod_wsgi for Python3
EN

Stack Overflow用户
提问于 2015-06-05 19:49:24
回答 3查看 35.2K关注 0票数 22

有人能给我一套关于在UbuntuforPython3上安装mod_wsgi的明确说明吗?

我确实成功地使用了mod_wsgi和Python3,有一小会儿我感到很高兴。

...until我查看了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返回:

(编辑:不,他没有,他用的是pip而不是pip3。这是对的吗?他的电线交叉了吗?pip是否会忽略这样一个事实:他在自己的py3venv中,只是使用系统的py2安装?但无论如何,这并不能解决混乱.

代码语言:javascript
复制
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 ...。那肯定是不对的?但如果我真的使用pip3,我会得到:

代码语言:javascript
复制
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,编译大约需要5分钟:

代码语言:javascript
复制
(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虚拟主机上。

然而,这确实消除了错误;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

又被科技淹没了,有人能给我一根线吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-05 21:09:54

如果它们激活了Python3虚拟环境,并且它的bin目录位于路径中,那么它们很可能只运行'pip‘而不是’pip 3‘。您应该运行“哪个pip”来验证它是否来自您期望的虚拟环境。

'mod_wsgi-httpd‘包专门用于安装Apache本身的一个不同实例,以解决系统范围Apache过时或缺少开发头文件或无法修改系统范围内配置的问题。如果您没有根访问权限来修复系统范围的问题,并且只对在非特权端口上运行感兴趣,因此不需要根访问,则通常更有相关性。您还必须使用“mod_wsgi”包中的“mod_wsgi”,该包在安装了'mod_wsgi‘之后安装了'pip’,因为这是使用‘mod_wsgi’安装版本的Apache的唯一方法。

因此,对于‘mod_’,您确实想忽略它。如果您已经安装了它,那么'pip‘卸载它和'mod_wsgi’。后者需要卸载,因为它将绑定到‘mod_wsgi’Apache版本,并且'mod_wsgi.so‘将不能在系统范围内工作。

至于链接中的不同用户步骤,它们看起来是正确的,尽管我要说的是,在步骤3中,应该突出显示要添加的LoadModuleWSGIPythonHome行是运行mod_wsgi-express install-module命令时的输出。什么是输出是定制的,以配合您的安装应该是。所以,不要合成值,只需使用命令输出。

如果仍然有一个wsgi.load文件,那么运行sudo a2dismod wsgi以摆脱它,或者手动删除它。它是旧系统打包的mod_wsgi遗留下来的。

票数 10
EN

Stack Overflow用户

发布于 2015-06-06 11:39:26

我打算用这个答案作为一个“对自己来说可能对他人有用的笔记”。

在编写本报告时,apt-get安装了一个过时的mod_wsgi版本。

pip安装一个最新版本。它通过下载源代码并对其进行编译来做到这一点。

设置一个Python3虚拟环境并使用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就可以完成了。

然后按照原始链接中的说明:

代码语言:javascript
复制
(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的错误日志:

代码语言:javascript
复制
a2enmod wsgi
sudo service apache2 restart
cat /var/log/apache2/error.log
票数 42
EN

Stack Overflow用户

发布于 2022-11-19 11:09:36

当我在终端中输入apxs时,它说可以安装该命令:

sudo apt install apache2-dev

而且起作用了!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30674644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档