在Ubuntu上安装用于Python3的mod_wsgi

lstz6jyr  于 2022-11-22  发布在  Python
关注(0)|答案(3)|浏览(322)

有谁能给予我一套在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而不是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
又沉迷于科技了,谁能给我扔一条线?

yrdbyhpb

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就可以完成了。
然后按照原始链接中的说明进行操作:

(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
7xzttuei

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中,应该强调要添加的LoadModuleWSGIPythonHome行是运行mod_wsgi-express install-module命令时的输出。输出是定制的,以匹配您的安装应该是什么。所以不要虚构值,只要使用该命令的输出。
如果你有一个wsgi.load文件,运行sudo a2dismod wsgi来删除它,或者手动删除它。它是旧系统包mod_wsgi遗留下来的。

omhiaaxx

omhiaaxx3#

当我在终端中输入apxs时,它说可以使用以下命令安装该命令:
sudo apt install apache2-dev
而且成功了!

相关问题