Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでモジュールの場所(ファイルパス)を確認する方法をわかりやすく解説

Pythonで開発をしていると、「このモジュールは実際にどこにあるファイルなのか?」「どのソースコードが読み込まれているのか?」を確認したくなることがあります。デバッグや環境トラブルの調査では、モジュールの実体となるファイルの場所を把握することが非常に重要です。この記事では、代表的な確認方法をいくつか紹介します。

__file__ 属性でソースファイルの場所を調べる

純粋なPythonで書かれたモジュール(.py ファイル)であれば、モジュールオブジェクトが持つ __file__ 属性を見ることで、ソースファイルの場所を簡単に特定できます。

>>> import mymodule
>>> mymodule.__file__
'C:/Users/Ayush/mymodule.py'

このように、インポートしたモジュールの __file__ を参照すると、実際に読み込まれている .py ファイルへの絶対パスが表示されます。意図しない同名モジュールが優先されていないかを確認したいときにも役立ちます。

C言語で実装された組み込みモジュールの場合

ただし、注意点があります。標準ライブラリの多く(sysmathjson の一部など)は、パフォーマンス向上のために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() を使うと組み込みかどうかの判別も可能

用途に応じてこれらの方法を使い分ければ、モジュールの所在に関するトラブルシューティングがぐっと楽になります。

  1. Pythonのkeyboardモジュールの使い方を徹底解説!キーボード操作を自動化しよう

    本記事では、Python 3.x(およびそれ以前のバージョン)で利用できるkeyboardモジュールの使い方について詳しく解説します。キーボード入力の自動化や制御を行いたい方にとって、非常に便利なライブラリなので、ぜひ最後までご覧ください。 推奨開発環境 動作確認には Jupyter Notebook の使用を推奨します。対話形式でコードを実行しながら挙動を確かめるのに適しています。 インストール方法 keyboardモジュールは、pipコマンドを使って簡単にインストールできます。 >>> pip install keyboard なお、このモジュールはOSレベルでキーボ

  2. Pythonのgetpassモジュールとは?パスワード入力とユーザー名取得の基本を解説

    Pythonの標準ライブラリには、ターミナル上で動作するアプリケーションにおいて、ユーザーの認証情報を検証してから処理を実行したい場合に役立つgetpassモジュールが用意されています。このモジュールには主に2つの関数が定義されており、セキュリティを意識したコマンドラインツールの開発に欠かせない存在です。 getpass() 関数:パスワードを安全に入力する getpass()関数は、ユーザーにパスワードの入力を促すための関数です。デフォルトでは、ターミナルに入力されたキーは画面に表示(エコー)されないため、第三者にパスワードを盗み見られる心配がありません。 また、プロンプトとして表示される