【问题标题】:wsgi: ModuleNotFoundError: No module named 'django' errorwsgi: ModuleNotFoundError: No module named 'django' 错误
【发布时间】:2022-02-01 21:44:35
【问题描述】:

我正在尝试在我的 Ubuntu 服务器上托管我的 Django 应用程序,并且在尝试访问我的网站时,我从 Apache 日志中收到此错误:

ModuleNotFoundError: No module named 'django'

我在我的 Django 应用程序中使用 venv 和 python 版本 3.8(我还在我的 venv 中编译并安装了 mod_wsgi)。 运行 pip freeze 我看到我的 venv 中确实安装了 Django:

APScheduler==3.8.1
asgiref==3.5.0
backports.zoneinfo==0.2.1
certifi==2021.10.8
charset-normalizer==2.0.10
colorama==0.4.4
commonmark==0.9.1
deepdiff==5.7.0
Django==4.0.1
django-cors-headers==3.11.0
djangorestframework==3.13.1
idna==3.3
lxml==4.7.1
mod-wsgi==4.9.1.dev1
ordered-set==4.0.2
prettytable==3.0.0
psycopg2-binary==2.9.3
Pygments==2.11.2
pytz==2021.3
pytz-deprecation-shim==0.1.0.post0
requests==2.27.1
rich==11.1.0
six==1.16.0
soupsieve==2.3.1
sqlparse==0.4.2
tzdata==2021.5
tzlocal==4.1
urllib3==1.26.8
wcwidth==0.2.5
whitenoise==5.3.0

为了以防万一它可以解决它,我全局安装了 Django,但在 Apache 中仍然出现错误。我一直在尝试遵循一些常见的解决方案,但似乎无法让它发挥作用。有什么我遗漏的或任何可能关闭的设置吗?

我确实注意到我的 Apache 说它配置了 3.6,这可能是原因吗?有没有办法让它使用我的python3默认的3.8?

我的 wsgi 用于我的 Django 项目(后端/核心/wsgi.py):

import os, sys
sys.path.append('/home/brickmane/djangoapp/pricewatcher/backend/')

sys.path.append('/home/brickmane/djangoapp/pricewatcher/backend/core/')
sys.path.append('/home/brickmane/djangoapp/pricewatcher/venv/lib/python3.8/site-packages')


from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')

application = get_wsgi_application()
/etc/apache2/apache2.conf 中的

我的虚拟主机设置:

WSGIPythonHome /home/brickmane/djangoapp/pricewatcher/venv
WSGIPythonPath /home/brickmane/djangoapp/pricewatcher/backend
<VirtualHost *:80>
  ServerAlias www.d8pricecheck.tk

  WSGIProcessGroup backend

  Alias /static/ /home/brickmane/djangoapp/pricewatcher/backend/static/

  <Directory /home/brickmane/djangoapp/pricewatcher/backend/static>
    Require all granted
  </Directory>

  WSGIScriptAlias / /home/brickmane/djangoapp/pricewatcher/backend/core/wsgi.py
  
  <Directory /home/brickmane/djangoapp/pricewatcher/backend/core>
    <Files wsgi.py>
      Require all granted
    </Files>
  </Directory>
 WSGIDaemonProcess backend python-path=/home/brickmane/djangoapp/pricewatcher/backend/core python-home=/home/brickmane/djangoapp/pricewatcher/venv
 WSGIProcessGroup backend
</VirtualHost>

重新启动和访问网站的完整 Apache 错误日志:

   [Tue Feb 01 16:24:09.488925 2022] [mpm_prefork:notice] [pid 30163] AH00169: caught SIGTERM, shutting down
    [Tue Feb 01 16:24:09.618015 2022] [ssl:warn] [pid 30456] AH01916: Init: (brickmaneserver.hsd1.ga.comcast.net:443) You configured HTTP(80) on the standard HTTPS(443) port!
    [Tue Feb 01 16:24:09.696360 2022] [ssl:warn] [pid 30459] AH01916: Init: (brickmaneserver.hsd1.ga.comcast.net:443) You configured HTTP(80) on the standard HTTPS(443) port!
    [Tue Feb 01 16:24:09.702058 2022] [mpm_prefork:notice] [pid 30459] AH00163: Apache/2.4.29 (Ubuntu) OpenSSL/1.1.1g mod_wsgi/4.5.17 Python/3.6 configured -- resuming normal operations
    [Tue Feb 01 16:24:09.702100 2022] [core:notice] [pid 30459] AH00094: Command line: '/usr/sbin/apache2'
    [Tue Feb 01 16:24:11.607243 2022] [wsgi:error] [pid 30490] [remote 27.147.213.242:33593] mod_wsgi (pid=30490): Target WSGI script '/home/brickmane/djangoapp/myserver/backend/core/wsgi.py' cannot be loaded as Python module.
    [Tue Feb 01 16:24:11.607289 2022] [wsgi:error] [pid 30490] [remote 27.147.213.242:33593] mod_wsgi (pid=30490): Exception occurred processing WSGI script '/home/brickmane/djangoapp/myserver/backend/core/wsgi.py'.
    [Tue Feb 01 16:24:11.607468 2022] [wsgi:error] [pid 30490] [remote 27.147.213.242:33593] Traceback (most recent call last):
    [Tue Feb 01 16:24:11.607495 2022] [wsgi:error] [pid 30490] [remote 27.147.213.242:33593]   File "/home/brickmane/djangoapp/myserver/backend/core/wsgi.py", line 21, in <module>
    [Tue Feb 01 16:24:11.607502 2022] [wsgi:error] [pid 30490] [remote 27.147.213.242:33593]     from django.core.wsgi import get_wsgi_application
    [Tue Feb 01 16:24:11.607520 2022] [wsgi:error] [pid 30490] [remote 27.147.213.242:33593] ModuleNotFoundError: No module named 'django'
    [Tue Feb 01 16:24:14.525726 2022] [wsgi:error] [pid 30490] [remote 108.162.238.29:17852] mod_wsgi (pid=30490): Target WSGI script '/home/brickmane/djangoapp/myserver/backend/core/wsgi.py' cannot be loaded as Python module.
    [Tue Feb 01 16:24:14.525891 2022] [wsgi:error] [pid 30490] [remote 108.162.238.29:17852] mod_wsgi (pid=30490): Exception occurred processing WSGI script '/home/brickmane/djangoapp/myserver/backend/core/wsgi.py'.
    [Tue Feb 01 16:24:14.526144 2022] [wsgi:error] [pid 30490] [remote 108.162.238.29:17852] Traceback (most recent call last):
    [Tue Feb 01 16:24:14.526242 2022] [wsgi:error] [pid 30490] [remote 108.162.238.29:17852]   File "/home/brickmane/djangoapp/myserver/backend/core/wsgi.py", line 21, in <module>
    [Tue Feb 01 16:24:14.526266 2022] [wsgi:error] [pid 30490] [remote 108.162.238.29:17852]     from django.core.wsgi import get_wsgi_application
    [Tue Feb 01 16:24:14.526327 2022] [wsgi:error] [pid 30490] [remote 108.162.238.29:17852] ModuleNotFoundError: No module named 'django'
    [Tue Feb 01 16:24:14.810004 2022] [wsgi:error] [pid 30490] [remote 162.158.187.159:17484] mod_wsgi (pid=30490): Target WSGI script '/home/brickmane/djangoapp/myserver/backend/core/wsgi.py' cannot be loaded as Python module.
    [Tue Feb 01 16:24:14.810169 2022] [wsgi:error] [pid 30490] [remote 162.158.187.159:17484] mod_wsgi (pid=30490): Exception occurred processing WSGI script '/home/brickmane/djangoapp/myserver/backend/core/wsgi.py'.
    [Tue Feb 01 16:24:14.810397 2022] [wsgi:error] [pid 30490] [remote 162.158.187.159:17484] Traceback (most recent call last):
    [Tue Feb 01 16:24:14.810484 2022] [wsgi:error] [pid 30490] [remote 162.158.187.159:17484]   File "/home/brickmane/djangoapp/myserver/backend/core/wsgi.py", line 21, in <module>
    [Tue Feb 01 16:24:14.810506 2022] [wsgi:error] [pid 30490] [remote 162.158.187.159:17484]     from django.core.wsgi import get_wsgi_application
    [Tue Feb 01 16:24:14.810566 2022] [wsgi:error] [pid 30490] [remote 162.158.187.159:17484] ModuleNotFoundError: No module named 'django'

【问题讨论】:

    标签: python django apache mod-wsgi


    【解决方案1】:

    您必须在 venv Python 版本中安装至少 3.8,因为 3.7 及更低版本与 Django 4.0+ 不兼容。您应该完全删除 venv 并使用已安装的较新(最新是 3.10.2)版本的 Python 重新初始化。

    如果 Ubuntu 至少有 3.8,那么应该没问题。如果没有,请尝试安装/升级它。 这里有一些提示:https://cloudbytes.dev/snippets/upgrade-python-to-latest-version-on-ubuntu-linux

    【讨论】:

    • 我的 venv 中的 python 版本是 3.8,我的全局 python3 也是 3.8。我之前安装了 3.6,这就是我认为 apache 配置为该版本的原因。我不知道这是否是导致问题的原因,但如果是我如何将 apache 设置为使用 3.8?我可以重新安装它吗?这会删除我在 /etc/apache2/apache2.conf 中的设置吗?
    • 我不确定重新安装 mod_wsgi 是否会干扰 apache 的 *.conf 文件,但有可能。最好复印。好吧,实际上你在这篇文章中有一份副本:)
    • 我真的不知道我在哪里有东西,如果可能的话,我不想破坏我现在拥有的静态网站及其设置。我尝试重新安装 mod_wsgi,但也没有用
    • 我想我无法在 Apache 方面为您提供帮助,抱歉。
    • 感谢我将继续提供的帮助。如果我无法弄清楚,我可能会备份我可以备份的内容并尝试重新安装 Apache 并查看它是否会使用 3.8。我不确定它是否配置为 3.6 是否意味着 mod wsgi 是为 3.6 制作的?我想知道它是否检查我的 apache 使用/配置的 python 版本并为此构建它。在本例中为 3.6,因为它已配置为它
    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 2022-10-13
    • 2022-08-14
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多