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

Pra*_*nab 1 python browser import feedparser

我使用SSH通过SSH安装了feedparser

$ python setup.py install --home=~/httpdocs/python-libraries/feedparser-4.1/
Run Code Online (Sandbox Code Playgroud)

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

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

print "Content-type: text/html\n\n"
try:
    import feedparser
except:
    print "Cannot import feedparser.\n"
Run Code Online (Sandbox Code Playgroud)

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

Cannot import feedparser.

有任何想法吗?

ken*_*der 7

也许这是sys.path从shell vs 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"
Run Code Online (Sandbox Code Playgroud)

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


编辑(作为一般说明)

最好避免使用如下语法:

try:
  something
except:
  print "error"
Run Code Online (Sandbox Code Playgroud)

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

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

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

try:
  import SomeModule
except ImportError:
  print "SomeModule can't be imported"
Run Code Online (Sandbox Code Playgroud)

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

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"
Run Code Online (Sandbox Code Playgroud)