'import feedparser'通过SSH工作,但在浏览器中失败

时间:2009-11-18 10:26:48

标签: python browser feedparser import

我使用

通过SSH安装了feedparser
$ python setup.py install --home=~/httpdocs/python-libraries/feedparser-4.1/

我这样做是因为我似乎没有权限正确运行'python setup.py install'

我在'test.py'中运行以下python代码。

print "Content-type: text/html\n\n"
try:
    import feedparser
except:
    print "Cannot import feedparser.\n"

当我通过SSH登录时,代码运行正常。但是当我在浏览器中查看它时,它会打印

Cannot import feedparser.

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

从shell vs Web服务器运行时,设置正确的sys.path可能是个问题。

有关此sys.path的更多信息:sys module

我建议在导入之前尝试将~/httpdocs/python-libraries/feedparser-4.1/(最好使用完整路径,不带~/)添加到sys.path中。

import sys
sys.path.append('/home/user/httpdocs/python-libraries/feedparser-4.1/')
print "Content-type: text/html\n\n"
try:
    import feedparser
except:
    print "Cannot import feedparser.\n"

哦,顺便说一句,httpdocs似乎是您的Web服务器的文档根目录。将图书馆放在那里是最好的主意吗? (好吧,除非你有唯一可以使用的地方......)


编辑(作为一般说明)

最好避免使用如下语法:

try:
  something
except:
  print "error"

这绝对不会让您了解您遇到的实际错误。您可以假设,如果您尝试导入模块,那么您有ImportError,但无法确定。

这使调试成为一个真正的地狱。去过那里,完成了,由于这个原因已经失去了几十个小时:)

只要您可以,请尝试一次捕获一个异常类型。所以:

try:
  import SomeModule
except ImportError:
  print "SomeModule can't be imported"

您还可以熟悉traceback模块。它在标准库中,它就在那里你可以使用它。因此,您的异常处理代码可能是这样的:

sys.path.append('/home/user/httpdocs/python-libraries/feedparser-4.1/')
try:
  import feedparser
except ImportError:
  print "Content-type: text/plain\n\n" # text/plain so we get the stacktrace printed well
  import traceback
  import sys
  traceback.print_exc(sys.stdout) # default is sys.stderr, which is error log in case of web server running your script, we want it on standart output
  sys.exit(1)
# here goes your code to execute when all is ok, including:
print "Content-type: text/html\n\n"

答案 1 :(得分:3)

听起来像PYTHONPATH问题。尝试将代码更改为此,看看会发生什么:

import sys
print "Content-type: text/html\n\n"
try:
    print sys.path
    import feedparser
except:
    print "Cannot import feedparser.\n"
    print sys.path

这可能会显示您的〜/ httpdocs / python-libraries /目录不在路径中,您需要更改sys.path或arrage以获取PYTHONPATH环境变量,以纠正问题。

更改路径时,请确保使用完整目录名称,而不是〜快捷方式。

答案 2 :(得分:0)

我尝试了sys.path$PYTHONPATH解决方案,但它们似乎没有用。 我没有尝试将PythonPath添加到httpd.confpython.conf - 这可能有效。

我最终要求root用户为我运行# python setup.py install。这很有用。

我使用的是Python 2.3。

答案 3 :(得分:0)

不要自己捕获异常,只需在程序顶部使用cgitb模块,就可以获得有关所有错误的更好信息。

import cgitb
cgitb.enable()