带有virtualenv和mod_wsgi的Apache:ImportError:没有名为'django'的模块

时间:2016-08-04 01:09:10

标签: django apache mod-wsgi pythonpath

我正在尝试使用以下Apache配置提供一个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()

我没有问题来提供STATIC文件和MEDIA文件。

我还检查了权限并尝试递归使用755,然后777到我的virtualenv的site-package目录。它不起作用。

但是当我试图访问我的网站的根目录时,我得到以下内容:

from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django'

我猜这是一个 Python路径相关的问题,因为django安装在我的virtualenv中。但是我在WSGIDaemonProcess的{​​{1}}属性中添加了相关的python路径,所以我不明白为什么它不起作用。

我也猜我可以add the relevant directory to my Python path in my wsgi.py by using the site module,但我想了解为什么我尝试的Apache配置还不够。我错过了什么吗?

4 个答案:

答案 0 :(得分:19)

您在WSGIProcessGroup上缺少WSGIScriptAlias指令或等效选项,因此您的应用程序实际上并未在您设置虚拟环境的守护程序进程组中运行。

请参阅Using mod_wsgi daemon mode

我还建议确保应用程序组设置为&#39;%{GLOBAL}&#39;如果这是您在守护程序进程组中运行的唯一应用程序。

因此使用:

WSGIScriptAlias / /path/to/project/project/wsgi.py \
    process-group=project application-group=%{GLOBAL}

最好将python-home用于虚拟环境。

    WSGIDaemonProcess project python-path=/path/to/project \
        python-home=/path/to/Envs/venv

请参阅:

答案 1 :(得分:4)

我的代表不超过50,所以我无法评论,但我想分享我的发现。

在WSGIDaemonProcess中,如果您使用的是Python 3.5,则需要设置与@ graham-dumpleton完全相同的

python-home=/path/to/Envs/venv

明确设定。

但是,如果您使用的是Python 3.4(或者据我所知的某些旧版本的Python,如2.7),则必须将其配置为

python-path=/path/to/project:/path/to/Envs/venv/lib/python3.4/site-packages

就像提问者所做的那样。

真的很奇怪。

答案 2 :(得分:0)

对我来说,问题是我为python2安装了mod wsgi。我必须为python3重新安装它:

sudo apt-get install libapache2-mod-wsgi-py3

答案 3 :(得分:0)

我的问题是我在 python 3.9 版上运行 libapache2-mod-wsgi-py3。当我将python版本回滚到3.7时,没有问题。