1

SSH経由でfeedparserをインストールしました

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

「pythonsetup.pyinstall」を適切に実行する権限がないように思われるため、これを行いました。

'test.py'で次のPythonコードを実行しています。

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

SSHでログインすると、コードは正常に実行されます。しかし、ブラウザで表示すると、印刷されます

Cannot import feedparser.

何か案は?

4

4 に答える 4

7

sys.pathシェルから実行しているときとWebサーバーから実行しているときの正しい設定に問題があるのか​​もしれません。

詳細はsys.pathこちら:sysモジュール

インポートする前に、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"

ちなみに、はhttpdocsWebサーバーのドキュメントルートのようです。ライブラリをそこに置くのが最善のアイデアですか?(まあ、あなたが使うことができる唯一の場所がない限り...)


編集(一般的な注意として)

次のような構文は避けるのが最善です。

try:
  something
except:
  print "error"

これにより、発生した実際のエラーに関する情報はまったく得られません。モジュールをインポートしようとすると、そこにあると想定できますImportErrorが、確信が持てません。

これはデバッグを本当に地獄にします。そこに行って、それをして、これのために数十時間を失いました:)

可能な限り、一度に1つの例外タイプをキャッチしてみてください。それで:

try:
  import SomeModule
except ImportError:
  print "SomeModule can't be imported"

トレースバックモジュールについても理解できます。これは標準ライブラリにあり、使用できるようになっています。したがって、例外処理コードは次のようになります。

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"
于 2009-11-18T10:38:01.453 に答える
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 / python-libraries /ディレクトリがパスにないことを示しており、問題を修正するには、sys.pathまたはPYTHONPATH環境変数のarrageを変更する必要があります。

パスを変更するときは、〜ショートカットではなく、完全なディレクトリ名を使用するようにしてください。

于 2009-11-18T10:36:40.093 に答える
0

sys.pathとソリューションの両方を試しました$PYTHONPATHが、うまくいかなかったようです。私はPythonPathをhttpd.confまたはに追加しようとしませんでしたpython.conf-それはうまくいく可能性があります。

結局、rootユーザーに実行を依頼することに# python setup.py installなりました。それはうまくいった。

私はPython2.3を使用していました。

于 2009-11-18T21:51:03.737 に答える
0

自分で例外をキャッチするのではなく、プログラムの先頭でcgitbモジュールを1回だけ使用すると、すべてのエラーに関するより適切な情報が得られます。

import cgitb
cgitb.enable()
于 2010-09-05T23:57:59.900 に答える