5

sys.path は、Python モジュールのすべての検索パスの完全なリストだと思いました。

ただし、私の Ubuntu マシンでは、「/usr/local/lib/python2.6/dist-packages/」がほとんどすべてのモジュールの場所であり、そのパスは sys.path にありません。そして、そのパス上の任意のモジュールを引き続きインポートできます。

編集、真実ではありません: sys.path を空のリストに設定しても、そのパスからインポートできます。

この dist-packages パスの暗黙の知識はどこから来たのですか? そして、この暗黙的な検索パスのグループに他のパスはありますか、それとも何でしょうか?

編集: 私の投稿の 2 番目の部分は正しくないようです。実際、「sys.path = []」は、現在の作業ディレクトリからでも、何もインポートできないことを意味します。謝罪いたします。

4

2 に答える 2

4

次のインストールに依存するデフォルトの言及に注意してください。

6.1.2. モジュール検索パス

という名前のモジュールがインポートされると、インタープリターは入力スクリプトを含むディレクトリで、次に環境変数で指定されたディレクトリのリストで、 spamという名前のファイルを検索します。これはシェル変数と同じ構文、つまりディレクトリ名のリストです。が設定されていない場合、またはそこにファイルが見つからない場合、検索は インストールに依存するデフォルト パスで続行されます。Unix では、これは通常 .spam.pyPYTHONPATHPATHPYTHONPATH.:/usr/local/lib/python

sys.path実際には、モジュールは、入力スクリプトを含むディレクトリ (または現在のディレクトリ) から初期化される変数によって指定されるディレクトリのリストPYTHONPATH、インストールに依存する defaultで検索されます。これにより、モジュールの検索パスを変更または置換するために何をしているかを知っている Python プログラムが可能になります。実行中のスクリプトを含むディレクトリは検索パス上にあるため、スクリプトが標準モジュールと同じ名前を持たないことが重要であることに注意してください。そうしないと、モジュールがインポートされたときに Python がスクリプトをモジュールとしてロードしようとします。これは通常、エラーになります。詳細については、セクション標準モジュールを参照してください。

編集私のUbuntuボックスで/usr/local/lib/python2.6/dist-packagesは、に存在しsys.pathます。クリアsys.pathして上記のディレクトリからモジュールをインポートしようとすると、機能しなくなります。これは、インタプリタがそのディレクトリの暗黙の知識を持っておらず、 経由で見つけたことを示唆していsys.pathます。

編集実験を行うときsys.pathは、Python セッションの開始時に修正するようにしてください。あなたがimport X、次に clear sys.path、そしてimport X再び、後者はXon がなくなっても失敗しませんsys.path

于 2011-07-14T17:37:56.020 に答える
1

モジュール検索パス

実際には、モジュールは、入力スクリプト (または現在のディレクトリ)、PYTHONPATH、およびインストールに依存するデフォルトを含むディレクトリから初期化される変数 sys.path によって指定されるディレクトリのリストで検索されます。

インストールに依存するデフォルトが実行されています。

インストールに依存する検索パスに関する詳細情報

于 2011-07-14T17:38:09.780 に答える