web-dev-qa-db-ja.com

Pythonで現在のインポートパスを取得する方法は?

コードのどこかでImportError例外が発生しますが、アプリケーションの起動時に同じモジュールを安全にインポートできます。どのパスPythonがインポートするモジュールを探すのかを知りたいので、この問題が発生する理由を追跡できます。これを見つけました。

print sys.path

これは、システムがモジュールをインポートしようとしたときに見えるすべてのパスのリストですか?

44
aligf

pythonデフォルトでチェックするパスの場所は、 sys.path

import sys
print(sys.path)
56

より良いフォーマットが必要な場合:

import sys

from pprint import pprint

pprint(sys.path)
5
marsh

他の答えはほぼ正解です

Python 3:

_import sys
import_paths = sys.path
_

In Python 2.7:

_import sys
import os
import copy
import_paths = copy.copy(sys.path)
if '__file__' in vars(): import_paths.append(os.path.abspath(os.path.join(__file__,'..')))
_

どちらのバージョンでも、メインファイル(つまり___== '__main'_はTrue)は、sys.pathに独自のディレクトリを自動的に追加します。 ただし Python 3は_sys.path_からモジュールをインポートするだけです。Python 2.7は_sys.path_現在のファイルのディレクトリから:これは、次のようなファイル構造がある場合に関連します。

_|-- start.py
|-- first_import
|   |-- __init__.py
|   |-- second_import.py
_

コンテンツ付き
start.py:
_import first_import_
__ init__.py:
_import second_import.py_

Python 3直接__init__.pyを実行すると動作しますが、start.pyを実行すると、__ init__.pyは_import second_import.py_にならないため__sys.path_になりません。 。

Python 2.7でstart.pyを実行すると、__ init__.pyは_import second_import.py_にありますが、_sys.path_と同じフォルダーにあるため) 。

perfectly duplicate Python 2.7の動作をPython 3にすることはできません。

0

_Sys.path_は、インポートを見つけるときにPythonが検索するすべてのパスのリストです。 1つ以上のpythonファイルを含むディレクトリに別のパスを追加する場合は、sys.path.append('path/to/directory')を使用できます。

0
Pauline Kelly