Skip to main content
 首页 » 编程设计

python之旧的 Python 2.7 仍然用于我的 Django 应用程序而不是虚拟环境

2024年10月17日33pengyingh

所以,我的 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 .