简体   繁体   English

wsgi: ModuleNotFoundError: No module named 'django' 错误

[英]wsgi: ModuleNotFoundError: No module named 'django' error

I am trying to host my Django app on my Ubuntu server and when trying to access my website, I get this error from the Apache log:我正在尝试在我的 Ubuntu 服务器上托管我的 Django 应用程序,当尝试访问我的网站时,我从 Apache 日志中收到此错误:

ModuleNotFoundError: No module named 'django'

I am using a venv for my Django app with python version 3.8 (I have also compiled and installed mod_wsgi in my venv).我正在为我的 Django 应用程序使用 venv 和 python 3.8 版(我还在我的 venv 中编译并安装了 mod_wsgi)。 Running pip freeze I see that I do have Django installed in my venv:运行 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

And just in case it might solve it, I installed Django globally but still got the error in Apache.为了以防万一它可以解决它,我在全球范围内安装了 Django 但仍然在 Apache 中出现错误。 I have been trying to follow some of the common solutions but can't seem to get it to work.我一直在尝试遵循一些常见的解决方案,但似乎无法让它发挥作用。 Is there anything I am missing or any setting that may be off?我有什么遗漏或任何可能关闭的设置吗?

I do notice my Apache says it is configured with 3.6, could this be the cause?我确实注意到我的 Apache 说它配置了 3.6,这可能是原因吗? is there a way to make it use 3.8 which is my python3 default?有没有办法让它使用我的python3默认的3.8?

My wsgi for my Django project (backend/core/wsgi.py):我的 Django 项目(后端/核心/wsgi.py)的 wsgi

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()

My virtualhost settings in /etc/apache2/apache2.conf:在 /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>

Full Apache error log from restarting and visiting website:重新启动和访问网站的完整 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'

You have to install in venv Python version at least 3.8, because 3.7 and lower are not compatible with Django 4.0+.您必须在 venv Python 版本中安装至少 3.8,因为 3.7 及更低版本与 Django 4.0+ 不兼容。 You should delete venv completely and reinitialize with installed Python with newer (newest is 3.10.2) version.您应该完全删除 venv 并使用已安装的 Python 和更新(最新的是 3.10.2)版本重新初始化。

If Ubuntu has at least 3.8, then it should be fine.如果 Ubuntu 至少有 3.8,那么应该没问题。 If not, try to install/upgrade it.如果没有,请尝试安装/升级它。 Here you have some hints how to do it: https://cloudbytes.dev/snippets/upgrade-python-to-latest-version-on-ubuntu-linux在这里你有一些提示: https://cloudbytes.dev/snippets/upgrade-python-to-latest-version-on-ubuntu-linux

This question is bit old, but if someone still faces this.这个问题有点老了,但如果有人仍然面临这个问题。 I have solved this by setting the python-path to my python's site-packages .我通过将python-path设置为我的 python 的 site-packages解决了这个问题。 Also for your case above也适用于您的上述情况

WSGIDaemonProcess backend python-path=/home/brickmane/djangoapp/pricewatcher/venv/lib/python
3.8/site-packages python-home=/home/brickmane/djangoapp/pricewatcher/venv

This solved my problem这解决了我的问题

For me, I determined that Apache2 mod_wsgi was compiled against python 3.9 and my django instance was using python 3.10.对我来说,我确定 Apache2 mod_wsgi 是针对 python 3.9 编译的,而我的 django 实例使用的是 Z23EEEB41047BDD25DZB63

ldd /usr/lib/apache2/modules/mod_wsgi.so
linux-vdso.so.1 (0x00007ffe32535000)
libpython3.9.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.9.so.1.0 (0x00007f9c59b77000)
. . .

Making sure my system Python was also set to 3.9 fixed this error.确保我的系统 Python 也设置为 3.9 修复了这个错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Django WSGI APACHE ModuleNotFoundError:没有名为“django”的模块 - Django WSGI APACHE ModuleNotFoundError: No module named 'django' wsgi:error pid 131476:tid 140411361216256 remote 200.110.48.158:35204 ModuleNotFoundError: No module named &#39;django.core&#39; - wsgi:error pid 131476:tid 140411361216256 remote 200.110.48.158:35204 ModuleNotFoundError: No module named 'django.core' 运行 WSGI 应用程序时出错:ModuleNotFoundError:没有名为“_overlapped”的模块 - Error running WSGI application: ModuleNotFoundError: No module named '_overlapped' 运行WSGI应用程序时出错,ModuleNotFoundError:没有名为“ mysite”的模块 - Error running WSGI application , ModuleNotFoundError: No module named 'mysite' django wsgi“没有模块命名模型”错误 - django wsgi “No module named models” error 在生产服务器上部署期间,我在 django 应用程序中收到 500 内部服务器错误 ModuleNotFoundError: No module named &#39;main&#39; (wsgi:error) - I am getting 500 Internal Server Error in django app during deloying on production server ModuleNotFoundError: No module named 'main' (wsgi:error) Django/mod_wsgi/Apache - mod_wsgi 没有使用为它编译的 Python 版本 - “ModuleNotFoundError: No module named 'math'” - Django/mod_wsgi/Apache - mod_wsgi is not using the Python version it was compiled for - “ModuleNotFoundError: No module named 'math' ” Django错误:ModuleNotFoundError:没有名为“ ofac”的模块 - Django Error: ModuleNotFoundError: No module named 'ofac' Django 错误:“ModuleNotFoundError:没有名为‘classroom’的模块” - Django error: "ModuleNotFoundError: No module named 'classroom' " Django 错误“ModuleNotFoundError:没有名为“ocore”的模块 - Django error 'ModuleNotFoundError: No module named 'ocore'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM