単に尋ねられたと考えるとbuiltins
、受け入れられた答えは明らかに正しいです。
私の場合、標準ライブラリも探していました。これは、特定の Python ディストリビューションに同梱されているすべてのインポート可能なモジュールのリストを意味します。これに関する質問が何度か寄せられましたが、探していたすべてを含む回答が見つかりませんでした。
x
私のユースケースは、Pythonimport x
ステートメントで任意のものを次のいずれかにバケット化していました。
- Python stdlib + ビルトインに含まれています
- サードパーティモジュールとしてインストール
- ない
これは、virtualenvs またはグローバル インストールで機能します。スクリプトを実行している Python バイナリの分布を照会します。最後のチャンクは virtualenv の外に到達しますが、望ましい動作だと思います。
# You may need to use setuptools.distutils depending on Python distribution (from setuptools import distutils)
import distutils
import glob
import os
import pkgutil
import sys
def get_python_library():
# Get list of the loaded source modules on sys.path.
modules = {
module
for _, module, package in list(pkgutil.iter_modules())
if package is False
}
# Glob all the 'top_level.txt' files installed under site-packages.
site_packages = glob.iglob(os.path.join(os.path.dirname(os.__file__)
+ '/site-packages', '*-info', 'top_level.txt'))
# Read the files for the import names and remove them from the modules list.
modules -= {open(txt).read().strip() for txt in site_packages}
# Get the system packages.
system_modules = set(sys.builtin_module_names)
# Get the just the top-level packages from the python install.
python_root = distutils.sysconfig.get_python_lib(standard_lib=True)
_, top_level_libs, _ = list(os.walk(python_root))[0]
return sorted(top_level_libs + list(modules | system_modules))
戻り値
インポートのソートされたリスト:[..., 'imaplib', 'imghdr', 'imp', 'importlib', 'imputil', 'inspect', 'io', ...]
説明:
各グループが必要な理由が明確になるように、それをチャンクに分割しました。
modules
- この
pkgutil.iter_modules
呼び出しは、読み込まれたすべてのモジュールをスキャンし、タプルsys.path
のジェネレーターを返します。(module_loader, name, ispkg)
- ここではソースモジュールのみに関心があるため、これをセットにしてパッケージを除外します。
site_packages
- 従来の site-packages ディレクトリの下にインストールされているすべてのパッケージのリストを取得し、リストから削除します
modules
。これは、サードパーティの deps にほぼ対応しています。
- これは、正しくするのが最も難しい部分でした。またはのように、多くのことがほとんど機能しました。ただし、ソース ファイルにインポートされたときのモジュール名ではなく、PyPi 上のモジュール名を返します。特定の病的なパッケージは、次のように亀裂をすり抜けます。
pip.get_installed_distributions
site
pip
requests-futures
としてインポートされrequests_futures
ます。
colors
、これは実際ansicolors
には PyPi 上にあるため、合理的なヒューリスティックを混乱させます。
top_level.txt
パッケージに が含まれていない使用頻度の低いモジュールがあることは確かです。しかし、これは私のユースケースの 100% をカバーしており、正しく構成されているすべてのもので動作するようです。
system_modules
sys
明示的に要求しないと、 、gc
、errno
およびその他のオプション モジュールなどのシステム モジュールを取得できません。
top_level_libs
結論
私の 2013 MacBookPro では、python2.7
インストール用に 403 個のモジュールが見つかりました。
>>> print(sys.version)
2.7.10 (default, Jul 13 2015, 12:05:58)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)]
>>> print(sys.hexversion)
34015984
>>> python_stdlib = get_python_libirary()
>>> len(python_stdlib)
403
コードの要点をまとめて出力します。クラスが欠けている、または偽のモジュールが含まれていると思われる場合は、それについてお知らせください。
*代替案