我想成为一个小Django项目具有以下Apache配置:跟Apache的virtualenv和mod_wsgi的:导入错误:没有模块名为“Django的
Apache的虚拟主机配置:
<VirtualHost *>
ServerName servername
[...]
<Directory "/path/to/project/project">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages
WSGIScriptAlias//path/to/project/project/wsgi.py
</VirtualHost>
我也有以下wsgi.py:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings")
application = get_wsgi_application()
我没有问题,为静态文件和媒体文件。
我也检查了权限,并尝试递归地使用755,然后777到我的virtualenv的站点包目录。它没有工作。
但是,试图达到我的网站的根我得到以下时:
from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django'
我猜测,这是一个Python的路径相关的问题,因为Django是安装在我的virtualenv。但我添加了相关的Python路径到WSGIDaemonProcess
的python-path
属性,所以我不明白为什么它不起作用。
我也猜我可能add the relevant directory to my Python path in my wsgi.py by using the site
module,但我想了解为什么我尝试的Apache配置是不够的。我错过了什么?
如果使用Python 3.4或2.7,你应该仍然使用''python-home''。我知道使用非首选设置“python-path”的方式没有问题,但它不是你应该做的。 ''python-home''选项是长时间设置虚拟环境位置的最佳方式。只要有古老mod_wsgi版本的Linux发行版仍然可以工作。即使文档可能尚未更新,情况也是如此。 :-) –
@ graham-dumpleton感谢您的建议。但就我而言,我正在使用python 3.4,并且该设置是您提到的“python-home”方式。但是,我的网站无法访问,因为Apache不断发送错误“导入错误:无模块名为'站点'”。只要我将它配置为“非首选方式”,就像提问者那样使用“:”,这个问题就解决了。是的,对于Python 3.5,您应该使用“python-home”方式,或者[ImportError:没有名为'django'的模块]问题会上升。 – Valorad
这意味着您的mod_wsgi实际上并未针对该版本的Python进行编译。您不能强制mod_wsgi使用不同于其编译的Python版本。使用''python-path''的问题之一是,当你做错了事情并且试图强制mod_wsgi使用一个不同于python版本的虚拟环境而不是mod_wsgi被编译时,它不会显示出来。当使用''python-home''时,它会错误地正确告诉你你做错了什么。 –