AWS EC2 Ubuntu环境下Django应用绑定Gunicorn失败问题求助
问题根本原因
- sudo命令默认会重置当前用户的环境变量,你激活的Python虚拟环境在sudo执行时会失效,因此调用的是系统全局安装的Python3.5版本,而非你升级后的Python3.6。报错中的语法错误是因为你安装的asgiref依赖包版本过高,用到了Python3.5不支持的变量类型注解语法,才会抛出
SyntaxError。 - 你初始化虚拟环境时,
/var/www/html/venv目录的所有者不是当前ubuntu用户,因此直接执行pip安装包时会触发权限不足报错,你添加--user参数后,gunicorn被安装到了ubuntu用户的本地目录,而非当前激活的虚拟环境内,因此虚拟环境中找不到gunicorn模块,触发ModuleNotFoundError。
解决步骤
- 修复虚拟环境目录权限,执行命令:
sudo chown -R ubuntu:ubuntu /var/www/html/venv - 激活你的虚拟环境:
source /var/www/html/venv/bin/activate - 卸载之前安装到用户本地目录的gunicorn,避免冲突:
pip3 uninstall gunicorn -y - 重新在虚拟环境内安装gunicorn,此时权限已正常无需加
--user参数:pip install gunicorn - 测试启动,无需加sudo直接执行即可:
gunicorn --bind 0.0.0.0:8000 logistics.wsgi:application
补充说明:如果你后续需要绑定80、443等需要root权限的特权端口,不要直接加sudo调用gunicorn,需指定虚拟环境内的gunicorn绝对路径,示例命令:
sudo /var/www/html/venv/bin/gunicorn --bind 0.0.0.0:80 logistics.wsgi:application
内容的提问来源于stack exchange,提问作者C-Bizz
相关产品推荐
相关产品推荐

