2009-11-18 63 views
1

我安装通过SSH feedparser失败,使用“进口feedparser”通过SSH的作品,但是当在浏览器

$ python setup.py install --home=~/httpdocs/python-libraries/feedparser-4.1/ 

我这样做,因为我似乎不具有权限才能正常运行“蟒蛇setup.py安装'

我在'test.py'中运行下面的python代码。

print "Content-type: text/html\n\n" 
try: 
    import feedparser 
except: 
    print "Cannot import feedparser.\n" 

当我通过SSH登录时,代码运行良好。但是,当我在浏览器中查看它,它打印

Cannot import feedparser.

任何想法?

回答

0

我试用过sys.path$PYTHONPATH解决方案,但他们似乎并没有工作。 我没有尝试添加PythonPath到httpd.confpython.conf - 可以工作。

我最终要求root用户为我运行# python setup.py install。这工作。

我正在使用Python 2.3。

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资料/蟒蛇的库/目录不在的路径,你将需要或是改变sys.path中或arrage对于PYTHONPATH环境变量来纠正问题。

当您更改路径时,请确保您使用完整的目录名称,而不是〜捷径。

7

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

更多关于sys.path这里:sys module

我建议在导入之前在sys.path中尝试添加~/httpdocs/python-libraries/feedparser-4.1/(最好使用完整路径,不使用~/)。

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" 
+0

有关回溯模块的真棒提示。谢谢! – Pranab 2009-11-24 01:13:45

0

您不必自己捕捉异常,只需在程序顶部使用cgitb模块一次,就可以获得有关所有错误的更好信息。

import cgitb 
cgitb.enable() 
相关问题