我想做什么?
激活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身份运行,正在搜索' [确定]
答案 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