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

问题描述 投票:1回答:1

我想做的事?

激活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身份运行,正在搜索'[OK]

python virtualenv supervisord
1个回答
-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
© www.soinside.com 2019 - 2024. All rights reserved.