関数が呼び出されたモジュールのパッケージの名前を返す関数が必要です。モジュールの名前を取得するのは簡単です:
import inspect
module_name = inspect.currentframe().f_back.f_globals['__name__']
また、モジュールのパッケージを取得するために最後の部分を削除するのも簡単です。
package_name = '.'.join(module_name.split('.')[:-1])
ただし、関数がパッケージの から呼び出される場合、__init__.py
名前の最後の部分を削除しないでください。たとえば、から呼び出された場合foo/bar/__init__.py
、module_name
上記の例'foo.bar'
では、すでにパッケージの名前である に設定されます。
モジュール名またはモジュールオブジェクトから、パッケージまたはモジュールを参照しているかどうかを確認するにはどうすればよいですか?
私が見つけた最良の方法は、モジュール オブジェクトの属性が存在する場合はそれを取得し、名前に拡張子が付加__file__
されたファイルを指しているかどうかを確認することです。__init__
しかし、これは私には非常にもろいようです。