2009-11-18 4 views
1

SSH를 통해 feedparser를 설치했습니다.'가져 오기 피드 파서'는 SSH를 통해 작동하지만 브라우저에서는 실패합니다.

제대로 실행하지 못했기 때문에 설치를 마쳤습니다. 'python setup.py install'

다음 파이썬 코드를 ' test.py '.

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

SSH로 로그인 할 때 코드가 잘 실행됩니다. 하지만 브라우저에서 볼 때

Cannot import feedparser.

아이디어가 있습니까?

답변

0

내가 모두 sys.path$PYTHONPATH 솔루션을 시도,하지만 그들은 작동하지 않았다. 파이썬 경로를 httpd.conf 또는 python.conf에 추가하려고 시도하지 않았습니다.

나는 루트 사용자에게 나를 위해 # python setup.py install을 실행하도록 요청했다. 그게 효과가 있었어.

저는 파이썬 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을 설정하는 것이 문제 일 수 있습니다.

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

추적 모듈에 대한 멋진 팁. 감사! – Pranab

0

예외를 직접 잡기보다는 프로그램 상단에서 cgitb 모듈을 한 번만 사용하면 모든 오류에 대해 더 나은 정보를 얻을 수 있습니다.

import cgitb 
cgitb.enable()