如何修复passenger_wsgi.py中‘Web应用无法启动’及Django模块找不到错误
解决ModuleNotFoundError: No module named 'django'问题
以下是针对Passenger部署场景下找不到Django模块的排查与解决步骤:
1. 确认Python环境一致性
Passenger运行时使用的Python版本,大概率和你终端安装Django的版本不一致,这是此类问题的核心原因:
- 在
passenger_wsgi.py开头添加调试代码:
重启Passenger服务后,查看服务器日志(如Apache/Nginx错误日志),获取Passenger对应的Python路径。import sys print("Passenger使用的Python路径:", sys.executable) print("当前Python路径列表:", sys.path) - 在终端执行以下命令,对比安装Django的Python环境:
若两个Python路径不同,直接说明环境不匹配。# 查看终端默认Python路径 which python3 # 查看Django的安装位置 python3 -m pip show django
2. 手动指定Django所在路径
如果不想切换环境,可直接在passenger_wsgi.py中添加Django所在的site-packages路径:
import sys # 替换成你截图中Django模块的实际路径,比如/usr/local/lib/python3.10/site-packages sys.path.insert(0, '/path/to/django/site-packages')
3. 使用虚拟环境隔离环境(推荐方案)
虚拟环境能彻底规避环境冲突问题:
- 创建并激活虚拟环境:
python3 -m venv my_django_env source my_django_env/bin/activate - 激活后安装Django:
pip install django - 在
passenger_wsgi.py开头添加虚拟环境路径配置:import sys, os # 替换成你的虚拟环境绝对路径 VENV_PATH = '/home/your_user/my_django_env' os.environ['VIRTUAL_ENV'] = VENV_PATH sys.path.insert(0, os.path.join(VENV_PATH, 'bin')) # 替换成对应Python版本的site-packages路径 sys.path.insert(0, os.path.join(VENV_PATH, 'lib/python3.10/site-packages'))
4. 配置Passenger指定Python解释器
在项目根目录的.htaccess文件中,直接指定Passenger使用的Python路径:
PassengerPython /path/to/your/python3
比如你的终端Python路径是/usr/local/bin/python3,就填写该路径。
内容的提问来源于stack exchange,提问作者Амир Рамешк
相关产品推荐
相关产品推荐

