You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让uWSGI Emperor使用虚拟环境内的Python3运行Django应用

解决uWSGI Emperor使用虚拟环境Python3的问题

你遇到的ImportError: No module named site错误,本质是因为全局安装的uWSGI是基于Python2.7编译的,它会强制用Python2来加载你的Python3虚拟环境,自然找不到对应版本的site模块。下面是具体的解决方法:

1. 修改init.d脚本中的DAEMON路径

这是最直接的办法,让uWSGI Emperor直接调用虚拟环境里基于Python3编译的uWSGI:

  • 先找到虚拟环境内的uWSGI路径,一般是/root/Env/firstsite/bin/uwsgi(虚拟环境的bin目录下会包含适配该环境Python版本的uWSGI)
  • 打开你的uWSGI init.d配置文件(通常路径是/etc/init.d/uwsgi),找到DAEMON=/usr/local/bin/uwsgi这一行,把它替换成虚拟环境的uWSGI路径:
    DAEMON=/root/Env/firstsite/bin/uwsgi
    
  • 保存文件后,重启uWSGI服务生效:
    sudo service uwsgi restart
    

2. 在项目的uWSGI配置文件中明确指定虚拟环境(双重保险)

为了避免后续出现环境混淆,建议在每个Django项目的uWSGI配置文件(比如firstsite_uwsgi.ini)里添加虚拟环境的配置:

[uwsgi]
# 你的其他配置(比如socket、processes等)
home = /root/Env/firstsite  # 指定虚拟环境路径
pythonpath = /path/to/your/django/project  # Django项目根目录
module = firstsite.wsgi:application  # WSGI入口模块

这里的home参数会让uWSGI自动切换到指定的虚拟环境,使用其中的Python3解释器。

关于upstart配置中的PATH

你提到的PATH=/sbin:/bin:/usr/sbin:/usr/bin并不会直接导致使用Python2运行。PATH只是系统查找可执行文件的顺序,只要你已经在init.d脚本里指定了虚拟环境的uWSGI路径,或者在项目配置里明确了Python环境,这个PATH配置就不会影响。但如果upstart脚本里是直接调用uwsgi命令而不是绝对路径,那系统会从PATH里找第一个匹配的(也就是全局的Python2版本uWSGI),所以关键还是要指定正确的uWSGI绝对路径。

内容的提问来源于stack exchange,提问作者gseiten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:38:56