に新しいディレクトリの場所を追加する必要がありますが、問題は、まだ定義されていPYTHONPATH
ないクリーンな新しくインストールされたシステム (Linux) にいることです。PYTHONPATH
私はそれについて読んだり使っPYTHONPATH
たりして、よく理解していると思っていましたが、PYTHONPATH
まだ存在しないのに何が起こっているのかわかりません。
存在しないものに追加することはできませんが、現在見つかっているすべての重要なライブラリを引き続き機能させたいので、慎重に、Python 内からprint str(sys.path)
すべての標準値を取得しました。次に、見つけたばかりのすべてのノードと新しいディレクトリを含めるenv
ための変数を定義しました。PYTHONPATH
しかし、うわー、多くのものが機能しなくなりました! Python は新しいenv
-variable でめちゃくちゃになったので、それを削除しなければなりませんでした。その時点で、すべてが再び機能しました。悪いことPYTHONPATH
に、システムは非常に混乱し、プロンプトで間違ったコマンドが入力されたときに表示するエラーメッセージを見つけることさえできませんでした.
私の問題は、コロンの欠落や、コロンを使用する必要があるときにセミコロンを使用するなどの単純なものではありません。私がチェックしました。また、新しいノードがなくても問題が発生するため、新しいディレクトリは問題を引き起こしません。では、このアプローチが機能しない理由を説明できる人はいますか?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
以下に、リクエストに応じて追加の詳細を提供しますが、これ以上読む必要はありません。問題は解決したと思います。PYTHONPATH にリストされているノードがすべての「標準」ノードをオーバーライドするのではなく、新しい追加のエントリになるという説明が重要でした (最初に何が来るかを制御できるように先頭に追加されると思います)。
PYTHONHOME または PYTHONPATH を定義せずにゼロから開始すると、Python 内から次のようになります。
print ':'.join(sys.path)
:/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client
これを PYTHONPATH として使用する (つまり、Python を呼び出す前に環境変数を定義する) と、Python を明示的に使用しなくても、コマンド プロンプトの機能が非常に低下します。例えば:
$> export PYTHONPATH='/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client'
$> echo $PYTHONPATH
/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client
$> IntentionalBadCommand
Fatal Python error: Py_Initialize: Unable to get the locale encoding
File "/usr/lib/python2.7/encodings/__init__.py", line 123
raise CodecRegistryError,\
^
SyntaxError: invalid syntax
Aborted
間違いは、PYTHONPATH が必要なすべての宇宙全体を含む必要があると考えていたことです。はい、投稿する前に RTFM を行いましたが、最初の単語「Augment」の意味を見逃していたようです。したがって、すべてを明示的に指定する必要はないというアドバイスを受けて、必要な追加の追加を指定するだけでよいというアドバイスを受けて、次のことを試しました。
$> export PYTHONPATH=/usr/lib/python2.7/dist-packages/postgresql-pkg
$> echo $PYTHONPATH
/usr/lib/python2.7/dist-packages/postgresql-pkg
$> IntentionalBadCommand
IntentionalBadCommand: command not found
上記のpostgresqlパッケージをまだ使用しようとはしていませんが、うまくいっているようです。PYTHONPATH の前に不必要なノードを大量に追加すると、問題が発生したときと同じように問題が発生する理由は、まだ少し不思議です。特に、信頼できるソースである sys.path からエントリを取得したためです。
しかし、とにかく、それはおそらく解決されているので、ありがとう!