【问题标题】:Installing mod_wsgi for Python3 on Ubuntu在 Ubuntu 上为 Python3 安装 mod_wsgi
【发布时间】:2015-08-20 21:11:32
【问题描述】:

谁能给我一套在 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-python

apt-get 正在安装 libapache2-mod-wsgi-py3 的过期版本,这会导致 Apache 日志中出现错误。 (我应该报告这个吗?如果是的话?)

在链接中,工程师正在使用pip 安装更新版本。

有趣的是,他似乎正在将其安装到虚拟 Python3 环境中。 (这和使用系统pip3有什么不同吗?)

他也使用pip3 install mod_wsgi,但pip3 search mod_wsgi返回:

(编辑:不,他没有,他使用 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 是什么?确定这不是我想要的吗?

最后,谁能提供一个从源代码安装 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

再次沉迷于科技,有人可以给我留言吗?

【问题讨论】:

    标签: ubuntu python-3.x pip virtualenv mod-wsgi


    【解决方案1】:

    如果他们已经激活了 Python 3 虚拟环境并且它的 bin 目录在那个路径中,那么他们很可能可以简单地运行“pip”而不是“pip3”。您应该运行“which pip”来验证它是否来自您期望的虚拟环境。

    “mod_wsgi-httpd”软件包专门用于安装 Apache 本身的一个独特实例,以解决系统范围的 Apache 已过时或缺少开发头文件或无法修改系统范围配置的问题。当您没有 root 访问权限来修复系统范围的问题并且只对在非特权端口上运行感兴趣并且不需要 root 访问权限时,它通常更相关。您还必须使用“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 中,应该突出显示要添加的 LoadModuleWSGIPythonHome 行是运行 mod_wsgi-express install-module 时输出的内容命令。什么是定制的输出以匹配您的安装应该是什么。所以不要编造值,只需使用该命令输出的内容即可。

    如果您还有一个wsgi.load 文件,请运行sudo a2dismod wsgi 以删除它或手动删除它。它是旧系统打包的 mod_wsgi 遗留下来的。

    【讨论】:

    • 我已经使用 pip 删除了 mod_wsgimod_wsgi-httpd。现在我被困住了。如果我pip install mod_wsgi 我得到与我的帖子相同的错误,我正在尝试pip3 ...。唯一能想到的就是用系统pip来做安装,希望自己能找到系统Apache...?
    • 对不起,完全忽略了 apxs 问题。那是因为您还没有从 Ubuntu 软件包存储库中为 Apache 安装适当的“开发”软件包。在 mod_wsgi 的 PyPi 页面上提到了这是必需的。如果没有该软件包,您将丢失 Apache 头文件及其名为“apxs”的构建工具。
    • 我找到了 pypi.python.org/pypi/mod_wsgi 页面——这很令人沮丧,因为它说 “例如,...,如果您使用的是 Apache prefork MPM,您将需要...如果相反如果您使用的是 Apache worker MPM,您将需要……” 但我从未听说过这些术语。这些是不同风格的 Apache 吗?所以不知何故我必须弄清楚我的 Apache 是什么风格以及相应的开发文件是什么......?
    • 我试过 sudo apt-get install apache2-dev 完成。但现在pip install mod_wsgi 挂起:gist.github.com/p-i-/b559dc5e43f0776e13fd 编辑:只需要重新启动,现在它完成了。似乎正在工作。谢谢!
    • 您可以通过遵循code.google.com/p/modwsgi/wiki/… 中的说明来确定可能使用哪个 Apache MPM .较新的 Linux 版本也不使用 prefork 或 worker MPM,而是使用 event MPM,这可能是唯一的选择,在这种情况下,您只需要通用的 Apache 开发包。
    【解决方案2】:

    我打算将此答案作为“可能对其他人有用的自我说明”。

    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 就完成了。

    然后按照原始链接中的说明进行操作:

    (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
    

    【讨论】:

    • sudo apt-get install apache2-dev 然后pip install mod_wsgi 是我需要做的;无需重启
    • a2enmod wsgi 不应该按照您的指示工作。 a2enmod wsgi_express 会。
    • sudo apt-get install python3-dev也是需要的
    • @Dzwiedziu-nkg 谢谢我没有安装 python3.8-dev
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多