繁体   English   中英

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

[英]Python3.7 ImportError: No module named 'django'

几天前,我决定将 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/myproject myproject.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'

我根据this documentation配置了VirtualHost ,但也许我在某处犯了错误,谢谢您的建议。

PS python manage.py runserver命令运行良好

问题很可能是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 的所有工作。当您使用 pyvenv 或 python -m venv 和 Python 3 时,不提供此类激活脚本。

编辑

Just figured out that mod_wsgi v4.6.1 seems to handle the virtual environment created by python -m venv properly, but mod_wsgi has to use the exact same python version as your virtualenv (mod_wsgi does not take the python interpreter from virtualenv, just check the python wsgi.py 中的版本,以确保 mod_wsgi 使用正确的版本)。 如果它的解释器版本错误,您必须在将全局 python package 更新为正确的版本号后重新安装 mod_wsgi。

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

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

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

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

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM