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 错误