原則として、その情報を取得するために必要なものはすべて、setup.py
そのようなすべてのパッケージにあるはずの にあります。その情報は、ディストリビューション オブジェクトのパッケージ、py_modules、ext_package、および ext_modules を結合したものです。distutils.core.setup
実際、この情報を取得するためだけに モックを作成した小さなスクリプトを次に示します。
import distutils.core
distutils.core._setup_stop_after = "config"
_real_setup = distutils.core.setup
def _fake_setup(*args, **kwargs):
global dist
dist = _real_setup(*args, **kwargs)
distutils.core.setup = _fake_setup
import sys
setup_file = sys.argv[1]
sys.argv[:] = sys.argv[1:]
import os.path
os.chdir(os.path.dirname(setup_file))
execfile(os.path.basename(setup_file))
cat = lambda *seq: sum((i for i in seq if i is not None), [])
pkgs = set(package.split('.')[0] for package
in cat(dist.packages,
dist.py_modules,
[m.name for m in cat(dist.ext_modules)],
[m.name for m in cat(dist.ext_package)]))
print "\n".join(pkgs)
多くのパッケージでは、これは魅力のように機能しますが、反例については、 を参照しnumpy
てください。