mod_wsgi 错误:ModuleNotFoundError:没有名为“django”的模块

Posted

技术标签:

【中文标题】mod_wsgi 错误:ModuleNotFoundError:没有名为“django”的模块【英文标题】:mod_wsgi error: ModuleNotFoundError: No module named 'django' 【发布时间】:2019-11-13 03:40:42 【问题描述】:

我正在尝试在 Ubuntu 18.04 上使用 Apache 2.4 部署一个非常基本的 Django 应用程序,而不使用虚拟环境。 wsgi.py执行时找不到django模块。

我尝试在 wsgi 中设置 sys.path,各种解决方案为 000-default.conf 定义了不同的配置设置。将站点包文件夹的所有权更改为 Apache 的 www-data,但似乎没有任何效果。我可以使用 virtualenv 使其工作,但对于生产服务器,我不想使用 virtualenv。我可以毫无问题地在 Python 的命令行中导入 django。

以下是我的 sample.tst.conf,如果已经使用 a2ensite 命令激活它。

<code>
<VirtualHost *:80>

    ServerName sample.tst
    ServerAdmin webmaster@sample.tst
    DocumentRoot /var/www/html

    <Directory /home/raza/projects/sample/sample>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess sample python-path=/home/raza/projects/sample
    WSGIProcessGroup sample

    WSGIScriptAlias / /home/raza/projects/sample/sample/wsgi.py

    <Location />
    WSGIProcessGroup sample
    </Location>

    ErrorLog $APACHE_LOG_DIR/error.log
    CustomLog $APACHE_LOG_DIR/access.log combined

</VirtualHost>
<code>

我该如何解决这个问题?我在这个问题上苦苦挣扎了一个多星期。

我是一位经验丰富的程序员,但对 Linux、python 和 Apache 平台非常陌生,所以我可能会犯一些明显的错误。

我在 Apache 日志文件中收到以下错误:

[Tue Jul 02 18:05:22.458785 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] mod_wsgi (pid=12490): Target WSGI script '/home/raza/projects/sample/sample/wsgi.py' cannot be loaded as Python module.
[Tue Jul 02 18:05:22.458854 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] mod_wsgi (pid=12490): Exception occurred processing WSGI script '/home/raza/projects/sample/sample/wsgi.py'.
[Tue Jul 02 18:05:22.458916 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] Traceback (most recent call last):
[Tue Jul 02 18:05:22.459009 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170]   File "/home/raza/projects/sample/sample/wsgi.py", line 12, in <module>
[Tue Jul 02 18:05:22.459037 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170]     from django.core.wsgi import get_wsgi_application
[Tue Jul 02 18:05:22.459072 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51170] ModuleNotFoundError: No module named 'django'
[Tue Jul 02 18:05:22.490159 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] mod_wsgi (pid=12490): Target WSGI script '/home/raza/projects/sample/sample/wsgi.py' cannot be loaded as Python module.
[Tue Jul 02 18:05:22.490240 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] mod_wsgi (pid=12490): Exception occurred processing WSGI script '/home/raza/projects/sample/sample/wsgi.py'.
[Tue Jul 02 18:05:22.490297 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] Traceback (most recent call last):
[Tue Jul 02 18:05:22.490314 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172]   File "/home/raza/projects/sample/sample/wsgi.py", line 12, in <module>
[Tue Jul 02 18:05:22.490318 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172]     from django.core.wsgi import get_wsgi_application
[Tue Jul 02 18:05:22.490330 2019] [wsgi:error] [pid 12490] [remote 10.10.10.99:51172] ModuleNotFoundError: No module named 'django'

【问题讨论】:

可能你的django安装在不同的python环境下。我建议检查您安装 django 的 python 版本,并检查您是否使用任何 python env 我只安装了Python 3.6,django安装在/home/raza/.local/lib/python3.6/site-packages。在这台机器上,我没有安装 venv 或 virtualenv 只是为了避免混淆。我也可以从 python3 命令行导入 django。 试试which python3。这应该会打印出home/raza/.local/lib/python3.6/bin/python/,但我认为它会显示/usr/bin/python3.6/usr/local/bin/python3.6,这意味着您已经在全局python 下安装了django,而不是在主文件夹中安装了python。 你说得对,它说 /usr/bin/python3。我怎样才能解决这个问题?出于好奇,为什么我可以从 python3 命令行导入 django? 更改此文件 sample.tst.conf 以指向您的全局 python3 安装。当您在终端中键入 python3 时,它会执行 /usr/bin/python3 并且因为我假设您执行了 sudo pip install django django 安装在全局 python3 下。如果你愿意,你可以点 pip 来使用你的本地 python(我不知道你是怎么做到的,通常你需要创建 virtualenv)。 【参考方案1】:

看起来 django 已安装到 python2 中(由您的操作系统使用)。 python3 带有预安装的 pip3 包安装程序。 所以使用“sudo pip3 install django”命令将 django 安装到 python3 环境中。 pip 只会将包安装到 python2 中。

【讨论】:

感谢您强调 Python2 的可能性。我在最初尝试解决问题时检查了这一点,但事实并非如此。问题是我的 Django 安装在 usr/local/bin/python3.6 文件夹而不是 usr/bin/python3.6 中,Apache 无法访问该文件夹。我停止了在全球部署 Django 的努力,因为我必须授予 Apache 对该本地文件夹的权限。现在我正在使用 virtualenv,一切都对我来说很好。

以上是关于mod_wsgi 错误:ModuleNotFoundError:没有名为“django”的模块的主要内容,如果未能解决你的问题,请参考以下文章

使用 elasticbeanstalk 部署 Flask 时出现 AWS mod_wsgi 错误

Mod_Wsgi 错误:“无效的无效命令 'WSGIScriptAlias',可能拼写错误或由未包含在服务器配置中的模块定义....”

mod_wsgi 错误:ModuleNotFoundError:没有名为“django”的模块

如何在 Ubuntu 上将 mod_wsgi 安装到 xampp 服务器?遇到 libtool 错误

403 错误禁止您无权访问此服务器 mod_wsgi 和 apache 上的 /myapp

使用 apache mod_wsgi 的 Django 多个站点:请求到错误的站点