Skip to main content
 首页 » 编程设计

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

2025年05月04日10dudu

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