Django Apache wsgi 更改 python 版本
Django Apache wsgi changes python version
我已经在装有 Apache2.4.7 的 Ubuntu 服务器上安装了我的 Django 应用程序,并将其配置为使用虚拟环境中的 py3.5.2。
但是,根据我在错误中看到的情况,它从 3.5 开始,默认为 3.4。
请解释为什么会这样:
/var/www/venv/lib/python3.5/site-packages
/usr/lib/python3.4
查看下面的完整错误:
SyntaxError at /
invalid syntax (forms.py, line 2)
Request Method: GET
Request URL: http://intranet.example.com/
Django Version: 1.10.1
Exception Type: SyntaxError
Exception Value:
invalid syntax (forms.py, line 2)
Exception Location: /var/www/intranet/formater/views.py in <module>, line 7
Python Executable: /usr/bin/python3
Python Version: 3.4.3
Python Path:
['/var/www/intranet',
'/var/www/venv/lib/python3.5/site-packages',
'/usr/lib/python3.4',
'/usr/lib/python3.4/plat-x86_64-linux-gnu',
'/usr/lib/python3.4/lib-dynload',
'/usr/local/lib/python3.4/dist-packages',
'/usr/lib/python3/dist-packages',
'/var/www/intranet',
'/var/www/intranet/venv/lib/python3.5/site-packages']
这是我的 apache2.conf 文件:
WSGIScriptAlias / /var/www/intranet/intranet/wsgi.py
#WSGIPythonPath /var/www/intranet/:/var/www/intranet/venv/lib/python3.5/site-packages
WSGIDaemonProcess intranet.example.com python-path=/var/www/intranet:/var/www/venv/lib/python3.5/site-packages
WSGIProcessGroup intranet.example.com
<Directory /var/www/intranet/intranet>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
我做错了什么?
Apache 的 mod_wsgi 模块是为特定的 Python 版本编译的。您不能通过将它指向不同 Python 版本的 Python 虚拟环境来使用不同的 Python 版本来使其 运行。 mod_wsgi 关于使用 Python 虚拟环境的文档中提到了这一点:
如果它最初是为 Python 3.4 编译的,那么您可以将 mod_wsgi 运行 作为 Python 3.5 的唯一方法是卸载该版本的 mod_wsgi 和 build/install 为 Python 3.5.
编译的 mod_wsgi 版本
问题的根源是 Graham Dumpleton 的回答。
我只是想提供更多信息,以防有人遇到与我相同的问题。
Python 3.5.2 在 Ubuntu 服务器 14.04 中没有官方仓库。
而不是使用一些不受支持的回购协议,如 this one, I compiled Python 3.5.2 from source using this very simple tutorial here。
在经历了很多困难之后,由于库路径不同,我无法为 Python 3.5.2 安装 mod_wsgi。
已经在这上面花了太多时间,我卸载了所有东西:Python、Apache、库并从头开始安装所有东西,这次使用 Python 3.4。
官方支持 Ubuntu 14.04,对于我的项目,我没有发现兼容性问题。
所以这是我的安装清单:
来自贴切:
python3,
python3-点,
阿帕奇2,
apache2-开发,
libapache2-mod-wsgi-py3 和
来自点:
姜戈,
mod-wsgi,
virtualenv(如果你打算使用 venv)。
然后只需配置“/etc/apache2/apache.conf”,运行 "apache2ctl configtest"并重启服务即可。
如需额外帮助,请参阅本指南 here。
我已经在装有 Apache2.4.7 的 Ubuntu 服务器上安装了我的 Django 应用程序,并将其配置为使用虚拟环境中的 py3.5.2。
但是,根据我在错误中看到的情况,它从 3.5 开始,默认为 3.4。
请解释为什么会这样:
/var/www/venv/lib/python3.5/site-packages
/usr/lib/python3.4
查看下面的完整错误:
SyntaxError at /
invalid syntax (forms.py, line 2)
Request Method: GET
Request URL: http://intranet.example.com/
Django Version: 1.10.1
Exception Type: SyntaxError
Exception Value:
invalid syntax (forms.py, line 2)
Exception Location: /var/www/intranet/formater/views.py in <module>, line 7
Python Executable: /usr/bin/python3
Python Version: 3.4.3
Python Path:
['/var/www/intranet',
'/var/www/venv/lib/python3.5/site-packages',
'/usr/lib/python3.4',
'/usr/lib/python3.4/plat-x86_64-linux-gnu',
'/usr/lib/python3.4/lib-dynload',
'/usr/local/lib/python3.4/dist-packages',
'/usr/lib/python3/dist-packages',
'/var/www/intranet',
'/var/www/intranet/venv/lib/python3.5/site-packages']
这是我的 apache2.conf 文件:
WSGIScriptAlias / /var/www/intranet/intranet/wsgi.py
#WSGIPythonPath /var/www/intranet/:/var/www/intranet/venv/lib/python3.5/site-packages
WSGIDaemonProcess intranet.example.com python-path=/var/www/intranet:/var/www/venv/lib/python3.5/site-packages
WSGIProcessGroup intranet.example.com
<Directory /var/www/intranet/intranet>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
我做错了什么?
Apache 的 mod_wsgi 模块是为特定的 Python 版本编译的。您不能通过将它指向不同 Python 版本的 Python 虚拟环境来使用不同的 Python 版本来使其 运行。 mod_wsgi 关于使用 Python 虚拟环境的文档中提到了这一点:
如果它最初是为 Python 3.4 编译的,那么您可以将 mod_wsgi 运行 作为 Python 3.5 的唯一方法是卸载该版本的 mod_wsgi 和 build/install 为 Python 3.5.
编译的 mod_wsgi 版本问题的根源是 Graham Dumpleton 的回答。 我只是想提供更多信息,以防有人遇到与我相同的问题。
Python 3.5.2 在 Ubuntu 服务器 14.04 中没有官方仓库。 而不是使用一些不受支持的回购协议,如 this one, I compiled Python 3.5.2 from source using this very simple tutorial here。 在经历了很多困难之后,由于库路径不同,我无法为 Python 3.5.2 安装 mod_wsgi。
已经在这上面花了太多时间,我卸载了所有东西:Python、Apache、库并从头开始安装所有东西,这次使用 Python 3.4。
官方支持 Ubuntu 14.04,对于我的项目,我没有发现兼容性问题。
所以这是我的安装清单: 来自贴切: python3, python3-点, 阿帕奇2, apache2-开发, libapache2-mod-wsgi-py3 和 来自点: 姜戈, mod-wsgi, virtualenv(如果你打算使用 venv)。
然后只需配置“/etc/apache2/apache.conf”,运行 "apache2ctl configtest"并重启服务即可。 如需额外帮助,请参阅本指南 here。