我通过 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 登录时,代码运行良好。但是当我在浏览器中查看它时,它会打印
无法导入 feedparser。
有什么想法吗?
最佳答案
可能是在从 shell 与从 Web 服务器运行时设置正确的 sys.path
的问题。
更多关于 sys.path
的信息:sys module .
我建议尝试将 ~/httpdocs/python-libraries/feedparser-4.1/
(最好使用完整路径,不带 ~/
)添加到你的 sys.导入前的路径。
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
看起来像是您的网络服务器的文档根目录。把图书馆放在那里是最好的主意吗? (好吧,除非有唯一可以使用的地方......)
编辑(作为一般说明)
最好避免这样的语法:
try:
something
except:
print "error"
这绝对不会向您提供有关您遇到的实际错误的任何信息。您可以假设,如果您尝试导入一个模块,就会出现 ImportError
,但不能确定。
这让调试变成了真正的 hell 。去过那里,做过那个,因此损失了几十个小时:)
只要有可能,尝试一次捕获一种异常类型。所以:
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"
关于python - 'import feedparser' 通过 SSH 工作,但在浏览器中时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1755043/