系统范围的Django包覆盖了mod_wsgi中的virtualenv

时间:2014-08-01 14:45:17

标签: django apache virtualenv mod-wsgi

我试图在mod_wsgi 3.3(Ubuntu 12.04)上部署我的Django应用程序。它不起作用只是因为(较旧的)系统范围的Django版本干扰并覆盖了virtualenv中安装的版本。我已经检查过卸载系统级版本修复了此,但我希望同时拥有这两个版本。

这是我的配置:

/home/user/project/wsgi.py

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

的/ etc / apache2的/网站启用/项目

WSGIScriptAlias /project /home/user/project/wsgi.py
WSGIDaemonProcess project python-path=/home/user/project:/home/user/venv/lib/python2.7/site-packages
WSGIProcessGroup project

<Directory /home/user/project>
    <Files wsgi.py>
        Order deny,allow
        Allow from all
    </Files>
</Directory>

这是我在/var/log/apache2/error.log中看到的内容:

[Fri Aug 01 16:02:09 2014] [error] [client 127.0.0.1]   File "/home/user/project/wsgi.py", line 30, in <module>
[Fri Aug 01 16:02:09 2014] [error] [client 127.0.0.1]     from django.core.wsgi import get_wsgi_application
[Fri Aug 01 16:02:09 2014] [error] [client 127.0.0.1] ImportError: No module named wsgi

这是因为全局版本是1.3,它没有django.core.wsgi。

virtualenv版本是1.7。在virtualenv下,Python会导入正确的Django版本。

2 个答案:

答案 0 :(得分:1)

你没有在wsgi文件中激活你的virtualenv,所以Python对它一无所知。

答案 1 :(得分:0)

使用你正在使用的mod_wsgi版本,你可以说:

WSGIDaemonProcess project python-home=/home/user/venv python-path=/home/user/project

即,使用WSGIDaemonProcess的python-home选项指定Python虚拟环境的sys.prefix值。

无需在WSGI脚本文件中使用sys.path。