デフォルトでは、パッケージはモジュール(またはサブパッケージ)をインポートしません。
ので:
import importlib
はモジュールUTILをインポートしません。
しかし、デベロッパーはあなたのためにそれを行うことを選択できます。例えば
:
>>> import os
>>>
>>> os.path.pathsep
':'
モジュールやパッケージについてのすべてを理解するには、excellent tutorialがあります。
注:「名前空間パッケージ」を満たすこともできます。詳細については、PEP 420を参照してください。あなたがpkg_resources.resource_listdir()
を使用することができますサブモジュールを見つけるために
EDIT
:
import pkg_resources
l = [m for m in pkg_resources.resource_listdir('importlib', '.')
if m.endswith('.py') and not m.startswith('_')]
あなたが得る:
['abc.py', 'machinery.py', 'util.py']
は、マニュアルでBasic Resource Accessを参照してください。
EDIT 2
サブパッケージやサブモジュールを発見する別の方法はpkgutil.walk_packagesを使用することです。それはおそらく最善の解決策です。例えば
:
import pkgutil
import importlib
for i in pkgutil.walk_packages(importlib.__path__):
print(i)
あなたが得る:
(FileFinder('/var/containers/Bundle/Application/84CF9501-45D6-43E0-9319-886F5DE85176/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/importlib'), '_bootstrap', False)
(FileFinder('/var/containers/Bundle/Application/84CF9501-45D6-43E0-9319-886F5DE85176/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/importlib'), '_bootstrap_external', False)
(FileFinder('/var/containers/Bundle/Application/84CF9501-45D6-43E0-9319-886F5DE85176/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/importlib'), 'abc', False)
(FileFinder('/var/containers/Bundle/Application/84CF9501-45D6-43E0-9319-886F5DE85176/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/importlib'), 'machinery', False)
(FileFinder('/var/containers/Bundle/Application/84CF9501-45D6-43E0-9319-886F5DE85176/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/importlib'), 'util', False)
'importlib'がパッケージです。パッケージのサブモジュールは明示的に何かを明示的にインポートするとロードされます(明示的なインポートは、パッケージやサブモジュールによっては表示されないかもしれませんが)。 – user2357112