Python3.7 ImportError:没有名为“django”的模块

Posted

技术标签:

【中文标题】Python3.7 ImportError:没有名为“django”的模块【英文标题】:Python3.7 ImportError: No module named 'django' 【发布时间】:2020-09-07 00:38:44 【问题描述】:

几天前,我决定将 python 从 2.7 版更新到 3.7 版。这是我目前的设置:

Ubuntu 16.04
Python 3.7.7
Django 3.0.6
Apache/2.4.18

使用命令python -m venv --system-site-packages /var/www/path/to/myenv我已经创建了虚拟环境,激活这个环境后我创建了一个新项目。 环境路径看起来像这样/var/www/path/to/myenv,项目路径看起来像这样/var/www/path/to/myenv/myprojectmyproject.conf 的配置如下:

<VirtualHost *:80>
    ServerName myproject.com
    ServerAlias www.myproject.com
    WSGIDaemonProcess myproject processes=2 threads=15 display-name=%GROUP python-home=/var/www/path/to/myenv python-path=/var/www/path/to/myenv/myproject
    WSGIProcessGroup candyhand

    WSGIScriptAlias /   /var/www/path/to/myenv/myproject/myproject/wsgi.py

    <Directory /var/www/path/to/myenv/myproject/myproject/>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>

    <Directory /var/www/path/to/myenv/myproject/>
        Require all granted
    </Directory>

    CustomLog /var/www/path/to/myenv/myproject/logs/apache_access.log combined
    ErrorLog /var/www/path/to/myenv/myproject/logs/apache_error.log

    Alias /static/ /var/www/path/to/myenv/myproject/static/
    <Directory /var/www/path/to/myenv/myproject/>
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>


    Alias /media/ /var/www/path/to/myenv/myproject/media/
    <Directory /var/www/path/to/myenv/myproject/>
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

但我从 apache 服务器收到错误 500。这是apache服务器的日志:

mod_wsgi (pid=9495): Target WSGI script '/var/www/path/to/myenv/myproject/myproject/wsgi.py' cannot be loaded as Python module.
[Wed May 20 16:25:08.145621 2020] [wsgi:error] [pid 9495]  mod_wsgi (pid=9495): Exception occurred processing WSGI script '/var/www/path/to/myenv/myproject/myproject/wsgi.py'.
[Wed May 20 16:25:08.145788 2020] [wsgi:error] [pid 9495]  Traceback (most recent call last):
[Wed May 20 16:25:08.145864 2020] [wsgi:error] [pid 9495]   File "/var/www/path/to/myenv/myproject/myproject/wsgi.py", line 12, in <module>
[Wed May 20 16:25:08.145885 2020] [wsgi:error] [pid 9495]      from django.core.wsgi import get_wsgi_application
[Wed May 20 16:25:08.145945 2020] [wsgi:error] [pid 9495]  ImportError: No module named 'django'

我根据这个documentation配置了VirtualHost,但也许我在某个地方弄错了,谢谢你的建议。

附: python manage.py runserver 命令运行良好

【问题讨论】:

尝试使用 python 3.8 或 3.6,因为 3.7 会导致 django 出现一些问题 您是否将 python 2 mod wsgi 替换为 python 3 版本?见here和here @AdonisN 是的,我的 mod_wsgi 更新了,这里是 mod_wsgi/4.3.0 版本 尝试在你的 wsgi 中明确指定虚拟环境,看看你是否得到不同的错误。您可以通过将以下内容添加到 wsgi 文件的顶部来做到这一点:import sys sys.path.insert(0, '/var/www/path/to/myenv/lib/python3.7/site-packages/') 您还可以将其添加到 wsgi 文件中,该文件将打印出它在日志中看到 print(sys.path) 的路径 你能确认你在 /var/www/path/to/myenv/lib/python3.7/site-packages/ 下安装了 django。检查那里是否存在 django 文件夹 【参考方案1】:

问题很可能是 python -m venv 没有在您的 virtualenv 中生成 activate_this.py,请查看 https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html#daemon-mode-multiple-applications 的文档

"当需要从 WSGI 脚本文件中激活 Python 虚拟环境时,最好使用 virtualenv 或 virtualenvwrapper 来创建 Python 虚拟环境。这是因为它们都提供了 activate_this.py完成设置 sys.path 的所有工作的脚本文件。当您在 Python 3 中使用 pyvenv 或 python -m venv 时,不会提供这样的激活脚本。"

编辑

刚刚发现 mod_wsgi v4.6.1 似乎可以正确处理python -m venv 创建的虚拟环境,但是 mod_wsgi 必须使用与您的 virtualenv 完全相同的 python 版本(mod_wsgi 不从 virtualenv 获取 python 解释器,只需检查wsgi.py 中的 python 版本,以确保 mod_wsgi 使用正确的版本)。如果它的解释器版本错误,您必须在将全局 python 包更新为正确的版本号后重新安装 mod_wsgi。

【讨论】:

【参考方案2】:

请检查您是否在 apache2.conf 中插入了这些 ligne:

WSGIPythonPath /usr/local/lib/python3.7/dist-packages
WSGILazyInitialization On
WSGIApplicationGroup %GLOBAL

能否分享一下wsgi.py + apache日志文件的开头

【讨论】:

【参考方案3】:

在您的虚拟主机之外添加以下内容: WSGIPythonHome /var/www/path/to/myenv

【讨论】:

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

ImportError:dlopen(//anaconda3/lib/python3.7/site-packages/MySQLdb/.. 2):未加载库:@rpath/libmysqlclient.

导入tensorflow.出现importError: DLL load failed: 找不到指定的模块。python3.7

ImportError: No module named 'tkinter'

Python3.5以上Celery4.2.1启动报错:ImportError: cannot import name 'LRUCache' from 'kombu.utils.

ImportError:无法从“类型”导入名称“IntType”

ImportError : 无法在 linux 上从 <module> 导入名称 <method>