我确实得到了Flask& mod_wsgi成功使用Python3,并在短时间内感到高兴.
…直到我查看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搜索mod_wsgi返回:
(编辑:不,他没有,他使用pip而不是pip3.这可能是对的吗?他的电线是否交叉?是不是要忽略他在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>",in <module> File "/home/pi/web/piFlask/venv3/build/mod-wsgi/setup.py",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安装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
再次沉浸在技术中,有人会给我一条线吗?
‘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中,应该突出显示要添加的LoadModule和WSGIPythonHome行是运行mod_wsgi-express install-module命令时输出的行.什么是输出是自定义的,以匹配您的安装应该是什么.所以不要组成值,只使用那个命令输出.
如果你还有一个wsgi.load文件,运行sudo a2dismod wsgi去掉它或者手动删除它.它是旧系统打包mod_wsgi的遗留物.