我试图在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版本。
答案 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。