我使用
通过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.
有什么想法吗?
答案 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.conf
或python.conf
- 这可能有效。
我最终要求root用户为我运行# python setup.py install
。这很有用。
我使用的是Python 2.3。
答案 3 :(得分:0)
不要自己捕获异常,只需在程序顶部使用cgitb模块,就可以获得有关所有错误的更好信息。
import cgitb
cgitb.enable()