Python3.7 ImportError: No module named 'django'

9

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

我根据这份文档配置了VirtualHost,但是可能在某个地方犯了错误,请给予建议,谢谢。

P.S. python manage.py runserver 命令运行良好。


@AdonisN 是的,我的 mod_wsgi 已更新,这是版本 mod_wsgi/4.3.0。 - Zagorodniy Olexiy
尝试在wsgi中明确指定虚拟环境,看看是否会出现不同的错误。您可以通过将以下内容添加到wsgi文件顶部来实现:import sys sys.path.insert(0, '/var/www/path/to/myenv/lib/python3.7/site-packages/')您还可以将此内容添加到wsgi文件中,以便在日志中打印出它所看到的路径:print(sys.path) - AdonisN
我刚刚尝试了一下,出现了相同的错误。 - Zagorodniy Olexiy
print(sys.path) 的输出是什么? - AdonisN
1
请确认您是否已经安装了 Django ,路径为 /var/www/path/to/myenv/lib/python3.7/site-packages/。检查其中是否存在一个名为 Django 的文件夹。 - AdonisN
显示剩余4条评论
3个回答

1
问题很可能是 python -m venv 没有在您的虚拟环境中生成 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必须使用与您的虚拟环境完全相同的Python版本(mod_wsgi不会从虚拟环境中获取Python解释器,只需在wsgi.py中检查Python版本以确保mod_wsgi正在使用正确的版本)。如果是错误的解释器版本,您必须在更新全局Python软件包的正确版本号后重新安装mod_wsgi。


0
在VirtualHost之外添加以下内容: WSGIPythonHome /var/www/path/to/myenv

0
请检查您是否已在apache2.conf中插入了这些行:
WSGIPythonPath /usr/local/lib/python3.7/dist-packages
WSGILazyInitialization On
WSGIApplicationGroup %{GLOBAL}

请您可以分享 wsgi.py 文件以及 Apache 日志文件的开头吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接