virtualenv内部的Django一直在使用错误的Python

2024-06-01 01:48:18 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的一生中,我无法找到一种简单的方法来正确配置(linodedebian 6)服务器,使用django1.8、python2.7.3和virtualenv。以下是我采取的步骤:

 mkvirtualenv --python=/usr/bin/python2.7 curator

这将在/srv/ve/.virtualenvs/curator下为我创建一个VirtualEnv

现在我运行:

^{pr2}$

django1.8安装成功。然后运行/www/srv:

django-admin startproject cmscore

然后,我按照Django Apache mod_wsgi指令操作,在我的sites available目录下得到一个Apache conf文件,如下所示:

<VirtualHost *:80>
  ServerName cms.example.com
  ServerAlias cms.example.com cms.example2.com
  ServerAdmin errors@example.com

  DocumentRoot /srv/www/curator/public_html

  WSGIDaemonProcess cms.example.com python-path=/srv/ve/.virtualenvs/curator/bin/python:/srv/ve/.virtualenvs/curator/lib/python2.7/site-packages
  WSGIProcessGroup cms.example.com
  WSGIScriptAlias / /srv/www/curator/cmscore/cmscore/wsgi.py

  <Directory /srv/www/curator/cmscore/cmscore>
  <Files wsgi.py>
  Order deny,allow
  Allow from all
  </Files>
  </Directory>

  Alias /robots.txt /srv/www/curator/public_html/robots.txt
  Alias /favicon.ico /srv/www/curator/public_html/favicon.ico
  Alias /css /srv/www/curator/public_html/css
  Alias /js /srv/www/curator/public_html/js
  Alias /img /srv/www/curator/public_html/img
  Alias /static/admin /srv/www/curator/public_html/admin
  Alias /static /srv/www/curator/public_html/static
  Alias /media /srv/www/curator/public_html/media

  ErrorLog /srv/www/curator/logs/error.log
  CustomLog /srv/www/curator/logs/access.log combined
</VirtualHost>

Django文档提到了一个WSGIPythonPath指令,但是我在使用它时得到了一个错误WSGIPythonPath cannot occur within <VirtualHost> section。在

对于这个配置,我得到了一个500错误(很明显,有很多设置我还没有添加,例如),但不是我所期望的。我得到这个(IP被我屏蔽了):

[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] mod_wsgi (pid=21802): Target WSGI script '/srv/www/curator/cmscore/cmscore/wsgi.py' cannot be loaded as Python module.
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] mod_wsgi (pid=21802): Exception occurred processing WSGI script '/srv/www/curator/cmscore/cmscore/wsgi.py'.
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] Traceback (most recent call last):
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]   File "/srv/www/curator/cmscore/cmscore/wsgi.py", line 15, in <module>
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]     from django.core.wsgi import get_wsgi_application
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]   File "/srv/ve/.virtualenvs/curator/lib/python2.7/site-packages/django/__init__.py", line 1, in <module>
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]     from django.utils.version import get_version
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]   File "/srv/ve/.virtualenvs/curator/lib/python2.7/site-packages/django/utils/version.py", line 7, in <module>
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]     from django.utils.lru_cache import lru_cache
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]   File "/srv/ve/.virtualenvs/curator/lib/python2.7/site-packages/django/utils/lru_cache.py", line 28
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]      fasttypes = {int, str, frozenset, type(None)},
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]                      ^
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx]  SyntaxError: invalid syntax

因此,当django1.8被比2.7更早的Python版本使用时,这似乎是一个错误。为了调试,我把这个放在wsgi.py文件:

import sys

activate_this = '/srv/ve/.virtualenvs/curator/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

sys.stderr.write(sys.version)

在我的Apache错误日志中,我看到:

2.6.6 (r266:84292, Dec 27 2010, 00:18:12) 

我已经尝试了我能想到的每一个技巧(在完全相同的服务器上使用django1.6和python2.7的现有virtualenv的技巧!)包括shebangs指向正确的Python安装管理.py文件,但我找不到任何方法让它生效。在

我知道我遗漏了一些很明显的东西,但我对此视而不见,有人能帮忙吗?在


Tags: pyclientwsgihtmlwwwvealiaserror