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

如何在Supervisor中激活Python虚拟环境并运行wsgi.py?

解决Supervisord无法加载虚拟环境模块的问题

我遇到过好几个类似的情况,核心原因其实是supervisord默认不会加载你的虚拟环境上下文——你手动在终端里source activate时,会把虚拟环境的路径自动加到PATH和PYTHONPATH里,但supervisord启动进程时用的是系统默认环境,根本找不到虚拟环境里安装的tensorflow、flask等模块。下面给你几个靠谱的解决方案:

方案1:直接调用虚拟环境内的Python解释器(最推荐)

这是最直接有效的方法,跳过"激活环境"的步骤,直接让supervisord调用虚拟环境里的Python。

首先找到你的tensorflow_p36虚拟环境的Python路径:

  • 如果是Anaconda安装的:/home/你的用户名/anaconda3/envs/tensorflow_p36/bin/python
  • 如果是virtualenv安装的:/home/你的用户名/.virtualenvs/tensorflow_p36/bin/python

然后修改/etc/supervisord.conf里的进程配置段,把command改成直接用这个Python路径运行wsgi.py:

[program:your_app_name]
# 替换成你自己的虚拟环境Python路径和wsgi.py路径
command=/home/你的用户名/anaconda3/envs/tensorflow_p36/bin/python /path/to/your/wsgi.py
directory=/path/to/your/app/directory  # 你的项目根目录
autostart=true
autorestart=true
stdout_logfile=/var/log/your_app_stdout.log
stderr_logfile=/var/log/your_app_stderr.log

这样supervisord直接调用虚拟环境里的Python,自然能找到里面的所有模块。

方案2:用启动脚本封装激活命令

如果觉得直接写长路径麻烦,可以写一个shell脚本封装激活+启动的流程:

  1. 创建start_app.sh脚本,内容如下(注意所有路径用绝对路径):
#!/bin/bash
# 激活虚拟环境(替换成你自己的anaconda或virtualenv的activate路径)
source /home/你的用户名/anaconda3/bin/activate tensorflow_p36
# 运行应用
python /path/to/your/wsgi.py
  1. 给脚本加执行权限:
chmod +x /path/to/start_app.sh
  1. 修改supervisord.conf里的command指向这个脚本:
[program:your_app_name]
command=/path/to/start_app.sh
directory=/path/to/your/app/directory
autostart=true
autorestart=true
stdout_logfile=/var/log/your_app_stdout.log
stderr_logfile=/var/log/your_app_stderr.log

方案3:手动在supervisord配置里设置环境变量

如果上面两种方法都不行,还可以手动模拟source activate的效果,在配置里指定环境变量:

[program:your_app_name]
command=python /path/to/your/wsgi.py
directory=/path/to/your/app/directory
# 把虚拟环境的路径加到PATH和PYTHONPATH最前面
environment=PATH="/home/你的用户名/anaconda3/envs/tensorflow_p36/bin:%(ENV_PATH)s", PYTHONPATH="/home/你的用户名/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages:%(ENV_PYTHONPATH)s"
autostart=true
autorestart=true
stdout_logfile=/var/log/your_app_stdout.log
stderr_logfile=/var/log/your_app_stderr.log

最后一步:重启Supervisord生效

修改完配置后,记得重启supervisord让配置生效:

sudo systemctl restart supervisord

或者用supervisorctl热更新:

sudo supervisorctl reread
sudo supervisorctl update

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:52:07