Python スクリプトの 1 つが対話モードで実行されますが、コマンド ラインから実行すると失敗します。違いは、コマンド ラインから実行すると、不適切な .egg ファイルからモジュールをインポートし、対話的に実行すると、現在のディレクトリにある固定 (解凍) バージョンを使用することです。
私の質問は 2 つあります: a) Python がこれらの場所から実行されたときにモジュールを異なる方法でロードするのはなぜですか? b) それを回避するためのオプションは何ですか?
Python スクリプトの 1 つが対話モードで実行されますが、コマンド ラインから実行すると失敗します。違いは、コマンド ラインから実行すると、不適切な .egg ファイルからモジュールをインポートし、対話的に実行すると、現在のディレクトリにある固定 (解凍) バージョンを使用することです。
私の質問は 2 つあります: a) Python がこれらの場所から実行されたときにモジュールを異なる方法でロードするのはなぜですか? b) それを回避するためのオプションは何ですか?
UNIX システムおよび Mac OS-X の場合:
~/.python-eggs
ディレクトリはありますか?OS に依存しない:
どちらの場合も同じ Python インスタンスを使用していますか?
それぞれの場合を印刷sys.path
して、モジュール検索パスで最初に来るパッケージ ディレクトリを確認できますか?
対話モードでスクリプトを実行するとはどういう意味かわかりませんので、正確には言えません。ただし、対話モードでモジュール ( ) を探す最初の場所sys.path[0]
は現在のディレクトリ (呼び出しでもos.chdir()
インポートに影響します) ですが、スクリプトの場合は、スクリプトが配置されている ( から派生したsys.argv[0]
) ディレクトリです。スクリプトが配置されているディレクトリからスクリプトを実行する場合は実質的に同じですが、他の場合は異なる可能性があることに注意してください。お役に立てれば。
a) これらの場所から実行すると、Python がモジュールを異なる方法でロードするのはなぜですか b) それを回避するためのオプションは何ですか?
環境変数 PYTHONPATH を確認してください。Python がモジュールをインポートするとき、それらのディレクトリを検索します。問題を回避する 1 つの方法は、ローカル フォルダー「現在のディレクトリ内の (解凍された) バージョン」を PYTHONPATH の先頭に追加して、python が最初にそれを見つけられるようにすることです。