Apache with virtualenv and mod_wsgi : ImportError : No module named 'django'

Apache with virtualenv and mod_wsgi : ImportError : No module named 'django'

我正在尝试使用以下 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 的站点包目录。没用。

但是当我尝试访问我的网站的根目录时,我得到以下信息:

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

我猜这是一个 Python 路径 相关的问题,因为 django 安装在我的 virtualenv 中。但是我将相关的 python 路径添加到 WSGIDaemonProcesspython-path 属性,所以我不明白为什么它不起作用。

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

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

Using mod_wsgi daemon mode

我还建议确保将应用程序组设置为“%{GLOBAL}”,如果这是您 运行正在守护进程组中的唯一应用程序。

因此使用:

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

参见:

我的代表还没有超过 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

就像提问者所做的那样。

真奇怪。

对我来说,问题是我为 python2 安装了 mod wsgi。我不得不为 python3:

重新安装它
sudo apt-get install libapache2-mod-wsgi-py3

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