1

インポートが標準ライブラリからのものかどうかを確認する可能性はありますか?

例えば:

from math import sin #from the standard library.
from my_module import MyClass #not from the standard library.
4

3 に答える 3

5

Python 標準ライブラリは特別な方法で実装されていないため、これを行う簡単な方法はありません。Python にとっては、標準ライブラリと他のモジュールとの間に区別はありません。

せいぜい、モジュールを使用して、inspectいくつかのインジケーターを試してみることができます。たとえば、 を使用inspect.getsourcefile()してソース ファイルの場所を見つけ、それを使用してそれがコア ライブラリであるかどうかを確認します。ただし、C のモジュールは組み込みであるため TypeError を返すため、これは特にうまく機能しませんが、C 拡張モジュールは同じことを行うため、それらが標準ライブラリからのものであると推測することはできません。

本当にこれを行う必要がある場合は、標準ライブラリ モジュール名のリストを保持し、そのようにすることをお勧めします。これは優れた解決策ではありませんが、どの代替手段よりも安定している可能性があります。

于 2012-10-12T07:50:17.940 に答える
0

独自のモジュールを特定のディレクトリに保持する場合、モジュールの__file__プロパティを見て何かを行うことができます。

>>> import os
>>> os.__file__
'/usr/lib64/python2.6/os.pyc'

>>> import my_module
>>> my_module.__file__
'/path/to/my_packages/.../my_module.pyc'
于 2012-10-12T07:55:17.057 に答える
0

以下のソース コードは、モジュールが標準の 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
于 2016-04-24T02:38:36.503 に答える