python - Python3.7 ImportError:没有名为“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'
我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 的所有工作。当您在 Python 3 中使用 pyvenv 或 python -m venv 时,不提供此类激活脚本。
编辑
刚刚发现 mod_wsgi v4.6.1 似乎可以正确处理由创建的虚拟环境python -m venv
,但是 mod_wsgi 必须使用与您的 virtualenv 完全相同的 python 版本(mod_wsgi 不会从 virtualenv 获取 python 解释器,只需检查您的 wsgi 中的 python 版本.py 以确保 mod_wsgi 使用的是正确的)。如果它的解释器版本错误,则必须在将全局 python 包更新为正确的版本号后重新安装 mod_wsgi。
推荐阅读
- mysql - MySQL 错误代码:“字段列表”中的 1054 列“ID”未知
- powerbi - Power BI - 将列值的总和除以列数
- c# - 将列标题添加到数据表
- javascript - 赛普拉斯 OPENSSL_internal:NO_START_LINE
- java - 使用 TestNG 测试 Spring bean 的销毁方法时出错
- ubuntu - 在 ubuntu 上安装 Composer
- java - 元空间中的静态对象内存泄漏
- ios - iOS Metal“纹理的像素格式与数据类型不兼容”
- c++ - 在 MacOS 11.2.1 上构建 C++ 程序在 10.12.6 上不起作用
- apache-kafka - Kafa + Structured Streaming:并行阅读主题