我想做的事?
激活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。我将解释其中的差异:
创建环境时,会在其中创建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