如何在Supervisor中使用virtualenvwrapper?

MLi*_*ter 21 python deployment virtualenv virtualenvwrapper supervisord

当我开发和测试我的项目时,我曾经使用virtualenvwrapper来管理环境并运行它:

workon myproject
python myproject.py
Run Code Online (Sandbox Code Playgroud)

当然,一旦我在正确的virtualenv,我使用正确版本的Python,以及其他相应的库来运行我的项目.

现在,我想使用Supervisord来管理同一个项目,因为它已准备好部署.问题是在执行脚本之前告诉Supervisord激活正确的virtualenv的正确方法是什么?我是否需要编写一个单独的bash脚本来执行此操作,并在Supervisord配置文件的命令字段中调用该脚本?

dm0*_*514 48

从命令行使用virtualenv的一种方法是使用位于virtualenv内部的python可执行文件.

对我来说,我在.virtualenvs目录中有我的虚拟环境.例如

/home/ubuntu/.virtualenvs/yourenv/bin/python

没有必要 workon

为了supervisor.conf管理龙卷风应用我做:

command=/home/ubuntu/.virtualenvs/myapp/bin/python /usr/share/nginx/www/myapp/application.py --port=%(process_num)s
Run Code Online (Sandbox Code Playgroud)

  • @MLister - 通过使用您的 virtualenv python,这将自动允许您访问安装在该 virtualenv 中的所有包,我从来不需要使用 `environment`。我想使用它取决于您是否需要为您的流程设置环境变量 (2认同)
  • 如果您在bin / postactivate和bin / postdeactivate中进行操作(例如设置环境变量)怎么办?似乎这种方法无法正确处理。 (2认同)

Ste*_*hry 7

将你的virtualenv/bin路径添加到你supervisord.confenvironment:

[program:myproj-uwsgi]
process_name=myproj-uwsgi
command=/home/myuser/.virtualenvs/myproj/bin/uwsgi
    --chdir /home/myuser/projects/myproj
    -w myproj:app
environment=PATH="/home/myuser/.virtualenvs/myproj/bin:%(ENV_PATH)s"
user=myuser
group=myuser
killasgroup=true
startsecs=5
stopwaitsecs=10
Run Code Online (Sandbox Code Playgroud)

  • 我还没有尝试过,但这似乎是最合理的方法。它允许人们轻松运行基于“click”的 cli。 (2认同)

onu*_*gör 5

第一次运行

$ workon myproject
$ dirname `which python`
/home/username/.virtualenvs/myproject/bin
Run Code Online (Sandbox Code Playgroud)

添加以下内容

environment=PATH="/home/username/.virtualenvs/myproject/bin"
Run Code Online (Sandbox Code Playgroud)

到 [program:blabla] 部分下的相关supervisord.conf。

  • 我遇到了类似的问题,上述解决方案不起作用,直到我意识到更改配置后值得重新启动supervisord。我并不是说这是你的问题,我确实说未来的 stackoverflow 居民重新启动supervisord以防万一。:-) (3认同)