Pythonでモジュールの場所(ファイルパス)を確認する方法をわかりやすく解説
Pythonで開発をしていると、「このモジュールは実際にどこにあるファイルなのか?」「どのソースコードが読み込まれているのか?」を確認したくなることがあります。デバッグや環境トラブルの調査では、モジュールの実体となるファイルの場所を把握することが非常に重要です。この記事では、代表的な確認方法をいくつか紹介します。
__file__ 属性でソースファイルの場所を調べる
純粋なPythonで書かれたモジュール(.py ファイル)であれば、モジュールオブジェクトが持つ __file__ 属性を見ることで、ソースファイルの場所を簡単に特定できます。
>>> import mymodule >>> mymodule.__file__ 'C:/Users/Ayush/mymodule.py'
このように、インポートしたモジュールの __file__ を参照すると、実際に読み込まれている .py ファイルへの絶対パスが表示されます。意図しない同名モジュールが優先されていないかを確認したいときにも役立ちます。
C言語で実装された組み込みモジュールの場合
ただし、注意点があります。標準ライブラリの多く(sys、math、json の一部など)は、パフォーマンス向上のためにC言語で実装されています。
そのようなモジュールでは、__file__ が指すのはPythonのソースではなく、コンパイル済みの拡張モジュール(LinuxやmacOSでは .so ファイル、Windowsでは .pyd ファイル)になります。また、インタプリタに直接組み込まれているモジュールには __file__ 属性自体が存在しない場合もあります。
Cで書かれた部分のソースコードは配布物の中に含まれていないため、__file__ から人間が読める形の実装を直接見ることはできません。どうしても中身を確認したい場合は、CPythonの公式リポジトリ(GitHub上の python/cpython)で該当モジュールのCソースを参照するのが確実です。
python -v オプションでインポート元を確認する
組み込みモジュールを含め、「何がどこからインポートされているのか」を一括して知りたい場合は、コマンドラインから -v(verbose)オプションを付けてPythonを起動するのが便利です。
python -v
このオプションを付けると、起動時に読み込まれるすべてのモジュールと、それぞれの読み込み元パスが詳細に出力されます。環境変数 PYTHONPATH や仮想環境の影響で、意図しない場所のモジュールが読み込まれていないかを調査する際に特に有用です。
補足:importlibを使ったより確実な方法
近年のPython(3.4以降)では、importlib.util.find_spec() を使ってモジュールの位置情報(spec)を取得する方法も推奨されています。
>>> import importlib.util
>>> spec = importlib.util.find_spec("mymodule")
>>> spec.origin
'C:/Users/Ayush/mymodule.py'
spec.origin にはモジュールの読み込み元が格納され、組み込みモジュールの場合は "built-in" という値になるため、そのモジュールが「ファイルとして存在するのか」「インタプリタ組み込みなのか」を判別するのにも使えます。
まとめ
- 純Pythonのモジュールなら
mymodule.__file__でソースファイルのパスがわかる - C実装の組み込みモジュールは .so / .pyd を指すか、そもそも
__file__がない場合がある python -vで全モジュールのインポート元を一覧できるimportlib.util.find_spec()を使うと組み込みかどうかの判別も可能
用途に応じてこれらの方法を使い分ければ、モジュールの所在に関するトラブルシューティングがぐっと楽になります。
-
Pythonのkeyboardモジュールの使い方を徹底解説!キーボード操作を自動化しよう
本記事では、Python 3.x(およびそれ以前のバージョン)で利用できるkeyboardモジュールの使い方について詳しく解説します。キーボード入力の自動化や制御を行いたい方にとって、非常に便利なライブラリなので、ぜひ最後までご覧ください。 推奨開発環境 動作確認には Jupyter Notebook の使用を推奨します。対話形式でコードを実行しながら挙動を確かめるのに適しています。 インストール方法 keyboardモジュールは、pipコマンドを使って簡単にインストールできます。 >>> pip install keyboard なお、このモジュールはOSレベルでキーボ
-
Pythonのgetpassモジュールとは?パスワード入力とユーザー名取得の基本を解説
Pythonの標準ライブラリには、ターミナル上で動作するアプリケーションにおいて、ユーザーの認証情報を検証してから処理を実行したい場合に役立つgetpassモジュールが用意されています。このモジュールには主に2つの関数が定義されており、セキュリティを意識したコマンドラインツールの開発に欠かせない存在です。 getpass() 関数:パスワードを安全に入力する getpass()関数は、ユーザーにパスワードの入力を促すための関数です。デフォルトでは、ターミナルに入力されたキーは画面に表示(エコー)されないため、第三者にパスワードを盗み見られる心配がありません。 また、プロンプトとして表示される