主管 - 运行Python脚本时PYTHONPATH问题

15

我正在使用supervisor运行一个python脚本:

[program:twitter_track]
autorestart = true
numprocs = 1
autostart = false
redirect_stderr = True
stopwaitsecs = 1
startsecs = 1
priority = 99
command = python /home/ubuntu/services/twitter.py track
startretries = 3
stdout_logfile = /home/ubuntu/logs/twitter_track.log

但是该进程无法启动。以下是错误日志的内容:

Traceback (most recent call last):
  File "/home/ubuntu/services/twitter.py", line 6, in <module>
    from mymodule.twitter.stream import TwitterStream
ImportError: No module named mymodule.twitter.stream
Traceback (most recent call last):
  File "/home/ubuntu/services/twitter.py", line 6, in <module>

似乎我得到了mymodule,但如果我独立运行twitter.py,一切都正常,只有在通过supervisor运行它时才会引发此错误。

我像这样在我的~/.profile文件中将mymodule添加到PYTHONPATH中:

export PYTHONPATH=$PYTHONPATH:/home/ubuntu/lib

脚本为什么在终端运行时可以工作,但在使用supervisor运行时却不能工作?希望得到帮助。

3个回答

35

PYTHONPATH定义添加到supervisord配置文件中的environment指令中。它应该放在你的[program:twitter_track]部分下面,像这样:

environment=PYTHONPATH=/home/ubuntu/lib/

这将确保当supervisord启动Python进程时,你的Python进程能够看到正确的PYTHONPATH


2
将PYTHONPATH定义添加到环境中:
[program:twitter_track]
command = python /home/ubuntu/services/twitter.py track
environment=PYTHONPATH=/home/ubuntu/lib

0

@Darren Griffith 给出了正确的解决方案。但是如果我们查看文档http://supervisord.org/configuration.html#program-x-section-settings -> environment,我们会发现它说:

一个键/值对列表,形式为KEY="val",KEY2="val2"

因此,您需要使用引号 ""

[program:twitter_track]
command = python /home/ubuntu/services/twitter.py track
environment=PYTHONPATH="/home/ubuntu/lib"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接