使用sudo以80端口启动Django服务器时遇ImportError问题求助
解决sudo启动Django 80端口找不到Django模块的问题
用
sudo -E保留当前用户环境变量
sudo默认会重置环境变量,导致root找不到你虚拟环境里的依赖。加上-E参数就能保留当前用户的环境配置(包括虚拟环境的依赖路径),直接执行:sudo -E .venv/bin/python3 manage.py runserver 0.0.0.0:80手动给sudo指定PYTHONPATH
先找到你虚拟环境的site-packages路径,执行pip show django,输出里的Location字段就是路径。然后把这个路径传给sudo的PYTHONPATH:sudo PYTHONPATH=/path/to/your/.venv/lib/pythonX.X/site-packages .venv/bin/python3 manage.py runserver 0.0.0.0:80把
/path/to/your/...换成实际的Location路径,pythonX.X换成你的Python版本(比如3.10)。给Python二进制文件加低端口绑定权限(更安全)
不想用sudo运行整个服务器的话,可以给虚拟环境的Python程序添加绑定1024以下端口的权限,执行:sudo setcap 'cap_net_bind_service=+ep' .venv/bin/python3之后不用sudo,直接运行下面的命令就能用80端口启动:
.venv/bin/python3 manage.py runserver 0.0.0.0:80
内容的提问来源于stack exchange,提问作者Joakim.roos
相关产品推荐
相关产品推荐

