Gunicorn启动Django项目报错:ImportError: No module named django_jalali
解决Gunicorn默认使用Python2而非Python3的问题
核心问题就是Gunicorn默认绑定了系统的Python2.7环境,但你的Django项目依赖的包(比如django_jalali)都装在Python3环境里,自然会出现导入错误。下面给你几个实用的解决办法,按推荐程度排序:
方法1:直接指定Python3环境启动Gunicorn
先确保你已经在Python3环境下安装了Gunicorn:
pip3 install gunicorn
之后你有两种稳妥的启动方式:
- 用Python3的
-m参数运行Gunicorn,百分百会调用Python3环境:
python3 -m gunicorn iteachyou.wsgi:application --bind 127.0.0.1:8003
- 或者找到Python3环境下Gunicorn的绝对路径,直接用路径启动:
# 先查找路径 which gunicorn3 # 或者用pip3定位 pip3 show gunicorn | grep Location # 假设路径是/usr/local/bin/gunicorn,直接调用 /usr/local/bin/gunicorn iteachyou.wsgi:application --bind 127.0.0.1:8003
方法2:用虚拟环境彻底隔离(长期推荐方案)
如果你的项目还没配置虚拟环境,强烈建议这么做,能彻底避免不同Python版本的依赖混乱:
- 创建并激活Python3虚拟环境:
# 创建名为venv的虚拟环境 python3 -m venv venv # Linux/macOS激活虚拟环境 source venv/bin/activate # Windows系统用这个命令激活 venv\Scripts\activate
- 在激活的虚拟环境里安装所有项目依赖:
pip install django django_jalali gunicorn
- 现在直接启动Gunicorn,它会自动使用虚拟环境里的Python3:
gunicorn iteachyou.wsgi:application --bind 127.0.0.1:8003
方法3:修改系统默认Python版本(谨慎操作)
这个方法能直接把系统默认Python改成3,但可能影响依赖Python2的系统工具(比如旧版apt),所以一定要谨慎:
# 先查看当前Python的软链接指向 ls -l /usr/bin/python # 备份原链接 sudo mv /usr/bin/python /usr/bin/python.bak # 创建新的软链接指向Python3 sudo ln -s /usr/bin/python3 /usr/bin/python
修改后再运行gunicorn,就会默认用Python3了,但如果后续系统工具出现异常,记得把软链接改回去。
验证是否生效
启动Gunicorn后,用下面的命令检查它的Python环境:
ps aux | grep gunicorn
看输出里的Python路径,确认是Python3而非Python2.7就没问题了。
内容的提问来源于stack exchange,提问作者Ghasem
相关产品推荐
相关产品推荐

