Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
旧的Python2.7仍然用于Django应用程序,而不是虚拟环境_Python_Django - Fatal编程技术网

旧的Python2.7仍然用于Django应用程序,而不是虚拟环境

旧的Python2.7仍然用于Django应用程序,而不是虚拟环境,python,django,Python,Django,因此,我在CentOS机器上有两个不同版本的Python—2.7和3.4。我想要的是简单地使用Python3.4运行我的Django应用程序,而不是那些过时的垃圾。为此,我创建了一个虚拟环境,因此我的文件夹结构现在如下所示 \vwrapper \bin \include \lib \lib64 ... 我使用Python3.4创建了这个虚拟环境。之后,我激活了这样的环境: $ source vwrapper/bin/activate (vwrappe

因此,我在CentOS机器上有两个不同版本的Python—2.7和3.4。我想要的是简单地使用Python3.4运行我的Django应用程序,而不是那些过时的垃圾。为此,我创建了一个虚拟环境,因此我的文件夹结构现在如下所示

\vwrapper
    \bin
    \include
    \lib
    \lib64
    ...
我使用Python3.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)
ALLOWED_HOSTS = ['*']
然后,我转到settings.py并进行了一些更正:

import os, sys
path = '/var/www/vwrapper/accent'
if path not in sys.path:
    sys.path.append(path)
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脚本,但它没有帮助。我希望有人知道这有什么问题。我花了两天的时间让一切顺利,但我还是有麻烦。我不知道我错过了什么。谢谢

PS.这是我的虚拟主机配置在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>

重新启动Apache,但没有结果。似乎我在使用Python 3.4时做了十几个步骤,但仍然遗漏了一个秘密步骤。

您必须确保您的Apache正在访问正确的virtualenv。激活仅适用于当前外壳程序。您的Apache很可能有一个配置文件以某种方式将您的请求映射到您的应用程序。

在相同的设置中,我使用的两个Python版本如下wsgi.py,它工作正常。您是否在wsgy.py中激活了virtualenv?我认为问题出在这个文件上。把它和你的比较一下

import os, site, sys

# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('~/virtualenvs/projectenv/local/lib/python3.5/site-packages')

# Add the app's directory to the PYTHONPATH
sys.path.append('/home/ubuntu/project')
sys.path.append('/home/ubuntu/project/project')

# Assign settings module for starting
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'

# Activate your virtual env
activate_env=os.path.expanduser("/home/ubuntu/virtualenvs/projectenv/bin/activate_this.py")
exec(open(activate_env).read())

# Load environ variables
from prepare_server import prepare_server
prepare_server()

application = get_wsgi_application()
您正在使用mod_wsgi运行Python。您是否使用编译为使用Python 3的mod_wsgi

例如,在Ubuntu上,有使用Python 2的
libapache2 mod wsgi
包和使用Python 3的
libapache2-mod-wsgi-py3
。但我不知道CentOS的情况


如果您可以自己编译mod wsgi,请参阅。

我在Apache中拥有的只是一个虚拟主机配置。此配置文件中未提及Python事件。我将在一秒钟内提交当前配置。请查看我的虚拟主机配置。如果您可以分享如何指定Apache应该使用哪种virtualenv,那就太好了。谢谢@e4c5。你所指的问题没有答案,只是对一些外部资源的大量引用。我真想知道,你为什么把我的问题标为可能的重复问题。但如果你仍然相信它们是重复的,你能建议如何解决我的问题吗?考虑到我现在所做的,你能告诉我我还缺少什么吗?@e4c5:问题不是设置了错误的PYTHONPATH,问题是使用了错误的解释器。@RemcoGerlich。绝对正确!但是,如果wsgi.py与Python2一起运行,这就不起作用了,是吗?@RemcoGerlich我认为如果您想将它用于Python2,那么应该修改它,因为exec只适用于Python3。正如我看到的,作者也希望运行python3完全同意!可能他忘了安装。你说得对!所有的麻烦都发生在摩登岛。谢谢还请阅读以了解如何正确设置Python虚拟环境。它清楚地解释了混合Python版本的问题。它还描述了推荐的做法是如何使用mod_wsgi守护程序模式,而不是本例中使用的嵌入式模式。
WSGIScriptAlias / "/var/www/vwrapper/accent/accent/wsgi.py"