Возможно, это проблема с правильной настройкой 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
выглядит как корневой документ для вашего веб-сервера. Это лучшая идея, чтобы поместить библиотеку туда? (ну, если нет единственного места, которое вы можете использовать ...)
редактировать (как общее примечание)
Лучше всего избегать синтаксиса, например:
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"