1

我通过 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

4 回答 4

7

sys.path也许这是从 shell 与从 Web 服务器运行时设置正确的问题。

更多关于sys.path这里:sys 模块

我建议在导入之前尝试将~/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"

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

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"
于 2009-11-18T10:38:01.453 回答
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 或为 PYTHONPATH 环境变量分配,以纠正问题。

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

于 2009-11-18T10:36:40.093 回答
0

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

我最终要求 root 用户# python setup.py install为我运行。那行得通。

我使用的是 Python 2.3。

于 2009-11-18T21:51:03.737 回答
0

与其自己捕获异常,不如在程序顶部只使用一次cgitb模块,您将获得有关所有错误的更好信息。

import cgitb
cgitb.enable()
于 2010-09-05T23:57:59.900 回答