【问题标题】:Getting 'ImportError: No module named tornado.httpserver'获取“ImportError:没有名为 tornado.httpserver 的模块”
【发布时间】:2013-10-14 21:14:21
【问题描述】:

尝试在我的 Debian 6 服务器上部署一个简单的 tornado 应用程序。我已经使用 pip 安装了 tornado,现在它已开启:

/usr/local/lib/python2.6/dist-packages/tornado

另外,我在执行 myapp.py 的 myuser 的 .bashrc 上手动添加了 tornado 的路径:

PYTHONPATH=/usr/local/lib/python2.6/dist-packages/tornado:/usr/local/lib/python2.6/dist-packages/tornado:/usr/local/lib/python2.6/dist-packages

myuser 是 www-data 组的成员。

我在 /var/log/tornado.log 中收到这个烦人的错误:

File "/path/to/myapp.py", line 1, in <module>
    import tornado.httpserver, tornado.ioloop, tornado.options, tornado.web, os.path, random, string
ImportError: No module named tornado.httpserver

supervisor.conf 是这样的:

[group:tornadoes]
programs=tornado-8000,tornado-8001,tornado-8002,tornado-8003


[program:tornado-8000]
command=python /path/to/myapp.py --port=8000
directory=/path/to
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
[program:tornado-8001]
command=python /path/to/myapp.py --port=8001
directory=/path/to
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
[program:tornado-8002]
command=python /path/to/myapp.py --port=8002
directory=/path/to
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
[program:tornado-8003]
command=python /path/to/myapp.py --port=8003
directory=/path/to
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info

具有讽刺意味的是,具有相同配置(aprat 形式 /path/to/myapp.py 和文件所有者)的相同应用程序在另一个 Debian 测试服务器上部署得很好。真的很困惑并感谢您的提示。

【问题讨论】:

  • 为什么不用virtualenv来正确安装tornado?
  • 手动设置 PYTHONPATH 是设计破坏的标志。
  • 不确定如何在 virtualenv 中做到这一点
  • @qliq this 是一个很好的教程

标签: python tornado supervisord


【解决方案1】:

您不应该将 tornado 目录添加到 PYTHONPATH,而是包含它的目录(dist-packages)。我不确定 debian 如何设置它的默认 python 路径,但默认情况下,像 dist-packages 和 site-packages 这样的目录通常都在它上面。如果不是,您实际上需要通过 sitecustomize.py 文件(使用 site.addsitedir())添加它们,而不是仅仅修改 pythonpath 以使某些功能正常工作(尽管这对龙卷风无关紧要)。

.bashrc 在 supervisord 下运行程序时不使用。如果您需要更改环境,请使用 supervisor.conf 中的“环境”语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2012-12-07
    • 2012-05-23
    • 2019-07-29
    • 2015-07-04
    • 2014-03-15
    • 2017-12-29
    相关资源
    最近更新 更多