インポートが標準ライブラリからのものかどうかを確認する可能性はありますか?
例えば:
from math import sin #from the standard library.
from my_module import MyClass #not from the standard library.
インポートが標準ライブラリからのものかどうかを確認する可能性はありますか?
例えば:
from math import sin #from the standard library.
from my_module import MyClass #not from the standard library.
Python 標準ライブラリは特別な方法で実装されていないため、これを行う簡単な方法はありません。Python にとっては、標準ライブラリと他のモジュールとの間に区別はありません。
せいぜい、モジュールを使用して、inspect
いくつかのインジケーターを試してみることができます。たとえば、 を使用inspect.getsourcefile()
してソース ファイルの場所を見つけ、それを使用してそれがコア ライブラリであるかどうかを確認します。ただし、C のモジュールは組み込みであるため TypeError を返すため、これは特にうまく機能しませんが、C 拡張モジュールは同じことを行うため、それらが標準ライブラリからのものであると推測することはできません。
本当にこれを行う必要がある場合は、標準ライブラリ モジュール名のリストを保持し、そのようにすることをお勧めします。これは優れた解決策ではありませんが、どの代替手段よりも安定している可能性があります。
独自のモジュールを特定のディレクトリに保持する場合、モジュールの__file__
プロパティを見て何かを行うことができます。
>>> import os
>>> os.__file__
'/usr/lib64/python2.6/os.pyc'
>>> import my_module
>>> my_module.__file__
'/path/to/my_packages/.../my_module.pyc'
以下のソース コードは、モジュールが標準の Python モジュールであるかどうかを示します。
def is_standard_module(module_name):
if module_name in sys.builtin_module_names:
return True
installation_path = None
try:
installation_path = importlib.import_module(module_name).__file__
except ImportError:
return False
linux_os, _, _ = platform.linux_distribution()
return "dist-packages" not in installation_path if linux_os == "Ubuntu" else "site-packages" not in installation_path