如何在主管中激活python虚拟环境?

时间:2018-03-06 15:47:16

标签: python virtualenv supervisord

我想做什么?

激活tensorflow_p36环境并运行python wsgi.py

我的supervisord.conf文件是什么样的?

[program:my_program]
command = /home/ec2-user/anaconda3/envs/tensorflow_p36/bin/python /home/ec2-user/abc/wsgi.py
directory= /home/ec2-user/abc/
environment=PATH= "/home/ec2-user/anaconda3/envs/tensorflow_p36/bin"
user= ec2-user
redirect_stderr = True
stdout_logfile = /home/ec2-user/abc/logs/gunicorn/gunicorn_stdout.log
stderr_logfile = /home/ec2-user/abc/logs/gunicorn/gunicorn_stderr.log

该文件位于默认的/etc/supervisord.conf位置。

到目前为止我尝试了什么?

我尝试了this question的所有解决方案,但是该虚拟环境中安装的模块没有被导入。例如,我在导入tensorflow,flask等时出错。然而,当我在source activate tensorflow_p36之后在终端中执行相同的命令时,它的工作正常。

我还尝试对this answer中建议的多个程序进行分组,我在第一个程序中激活了虚拟环境,并在第二个程序中运行了python命令并将它们组合在一起。没有用,仍然得到相同的导入错误。

额外信息:

当我运行sudo service supervisord restart时,我收到以下消息:

停止监督:[确定]

启动supervisord:/usr/local/lib/python2.7/site-packages/supervisor-3.3.4-py2.7.egg/supervisor/options.py:461:UserWarning:Supervisord以root用户身份运行正在默认位置(包括其当前工作目录)中搜索其配置文件;您可能希望指定“-c”参数,指定配置文件的绝对路径以提高安全性。   'Supervisord以root身份运行,正在搜索'                                                            [确定]

1 个答案:

答案 0 :(得分:-1)

您的命令不会激活环境 - 它只是调用该文件夹中的python。 我会解释其中的区别:

创建环境时,会在其中创建python.exe文件。调用该python文件将使用该python运行脚本 - 但在正常环境下。

另一方面,激活环境,更改PATH系统变量以指向该环境中的所有包。

总之 - 激活环境而不是仅仅使用python从该环境运行脚本应该可以解决您的问题。

编辑: 尝试这样的事情:

[program:my_program]
command = source activate tensorflow_p36 && python /home/ec2-user/abc/wsgi.py
directory= /home/ec2-user/abc/
environment=PATH= "/home/ec2-user/anaconda3/envs/tensorflow_p36/bin"
user= ec2-user
redirect_stderr = True
stdout_logfile = /home/ec2-user/abc/logs/gunicorn/gunicorn_stdout.log
stderr_logfile = /home/ec2-user/abc/logs/gunicorn/gunicorn_stderr.log