无法执行uwsgi --myproject.ini命令,遇ImportError错误求助
解决uWSGI启动Django项目时的
_remove_dead_weakref导入错误 这个ImportError: cannot import name _remove_dead_weakref错误我之前部署Django项目时也踩过坑,核心原因几乎都是uWSGI的Python插件版本和你的virtualenv内Python版本不兼容,或者uWSGI没有正确使用virtualenv的环境。下面给你几个具体的排查和解决步骤:
1. 确认Python版本匹配
首先搞清楚两个关键版本:
- 查看你的virtualenv使用的Python版本:
/var/virtualenv/myproject/bin/python --version - 查看uWSGI已安装的Python插件列表:
uwsgi --plugins-list
如果你的virtualenv用的是Python3.8,但uWSGI插件里只有python27或python36,那肯定会出问题。这时需要修改myproject.ini里的plugins配置,换成对应版本的插件,比如:
plugins = python38 # 替换成你实际的Python版本,比如python37、python39
2. 用virtualenv内的pip安装uWSGI(最稳妥的方案)
很多时候系统自带的uWSGI和virtualenv的Python版本不匹配,最简单的解决办法是直接在virtualenv环境内安装uWSGI:
- 先激活virtualenv:
source /var/virtualenv/myproject/bin/activate - 安装uWSGI:
pip install uwsgi - 之后用virtualenv内的uWSGI命令启动项目:
/var/virtualenv/myproject/bin/uwsgi --myproject.ini
这样能保证uWSGI和你的项目Python环境完全一致,从根源上避免版本不兼容问题。
3. 检查Django与Python的兼容性
如果上面两步都没解决,再确认你的Django版本是否支持当前virtualenv的Python版本:
- 比如Django 2.x最高只支持Python3.8,Django 3.x支持Python3.6-3.10,Django 4.x要求Python3.8及以上
- 如果版本不匹配,要么升级Django,要么降低Python版本(推荐升级Django到兼容版本)
修改后的示例配置文件
这里给你一份调整后的myproject.ini参考:
[uwsgi] home = /var/virtualenv/myproject chdir = /var/virtualenv/myproject/www module = project.wsgi # 匹配virtualenv的Python版本插件 plugins = python38 master = true processes = 4 no-orphans = true socket = /var/virtualenv/myproject/config/project.sock pidfile = /var/virtualenv/myproject/config/pid log-date = true chmod-socket = 666 vacuum = true # 可选:明确指定virtualenv的site-packages路径 pythonpath = /var/virtualenv/myproject/lib/python3.8/site-packages
内容的提问来源于stack exchange,提问作者urDMG
相关产品推荐
相关产品推荐

