所以,我的 CentOS 机器上有两个不同版本的 Python - 2.7 和 3.4。我想要的是简单地使用 Python 3.4 运行我的 Django 应用程序,而不是那些过时的旧垃圾。为此,我创建了一个虚拟环境,因此我的文件夹结构现在看起来像这样
\vwrapper
\bin
\include
\lib
\lib64
...
我使用 Python 3.4 创建了这个虚拟环境。之后我像这样激活了这个环境:
$ source vwrapper/bin/activate
(vwrapper) [root@...]
所以,我清楚地看到,我现在处于这个虚拟环境中。我现在甚至可以检查,我确实在使用 python 3.4:
(vwrapper) [root@...] # python --version
Python 3.4.5
在这个阶段一切看起来都很好。然后我安装了 django:
(vwrapper) [root@...] # pip install django
又好了。在\vwrapper\bin 中,我现在可以看到一些 Django 工具。然后我使用其中一个工具来创建我的第一个 Django 应用程序:
(vwrapper) [root@...] # bin/django-admin startproject accent
看起来不错。我转到 wsgi.py 并进行一些更正:
import os, sys
path = '/var/www/vwrapper/accent'
if path not in sys.path:
sys.path.append(path)
然后我转到 settings.py 并进行一些更正:
ALLOWED_HOSTS = ['*']
太棒了!唯一剩下要做的就是 apache 虚拟主机。所以,我创建了这个虚拟主机并重新启动了 apache:
(vwrapper) [root@...] # apachectl restart
太棒了!当我在浏览器中访问该主机时,我看到了我的第一个 Django 应用程序。到目前为止,一切都很好。但问题是,我看到使用的是旧的 Python 2.7,我通过返回浏览器 sys.version 来检查它:
def index(request):
return HttpResponse(sys.version)
因此,当我再次重新启动 apache 并转到此页面时,我会在浏览器中看到此消息:
2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
什么鬼?我试图通过放置
来修复它#!/usr/bin/python3.4
每个 .py 脚本,但它没有帮助。我希望有人知道这可能有什么问题。我花了两天时间使一切正常,但我仍然遇到麻烦。我不知道我错过了什么。谢谢!
附言。这是我的虚拟主机配置在 Apache 中的样子:
<VirtualHost *:8080>
ServerName django.localhost
WSGIScriptAlias / "/var/www/vwrapper/accent/accent/wsgi.py"
<Directory "/var/www/vwrapper/accent/accent">
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
因此,如您所见,我没有在此配置中提及 Python,但我可能应该提及(尽管我不知 Prop 体如何提及)。
编辑
我对我的虚拟主机配置进行了一些更正,使其看起来像:
WSGIPythonPath /var/www/vwrapper/accent:/var/www/vwrapper/lib/python3.4/site-packages
<VirtualHost *:8080>
ServerName django.localhost
WSGIScriptAlias / "/var/www/vwrapper/accent/accent/wsgi.py"
<Directory "/var/www/vwrapper/accent/accent">
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
我还编辑了我的 wsgi.py 脚本:
import site
site.addsitedir('/var/www/vwrapper/lib/python3.4/site-packages')
重新启动 Apache,但无济于事。好像我做了十几步来使用 Python 3.4,但仍然漏掉了一些 secret 步骤。
请您参考如下方法:
WSGIScriptAlias / "/var/www/vwrapper/accent/accent/wsgi.py"
您正在使用 mod_wsgi 来运行您的 Python。您是否使用编译为使用 Python 3 的 mod_wsgi?
例如,在 Ubuntu 上,存在使用 Python 2 的软件包 libapache2-mod-wsgi 和使用 Python 3 的 libapache2-mod-wsgi-py3。但是我不知道 CentOS。
如果您可以自己编译 mod-wsgi,请参阅 https://modwsgi.readthedocs.io/en/develop/user-guides/installation-issues.html#multiple-python-versions .
