项目结构目录如下:
│ main.py │ test.py │ ├─A │ a1.py │ a2.py │ __init__.py │ ├─B │ b1.py │ __init__.py │ └─C │ c1.py │ __init__.py │ └─c c2.py __init__.py
1、获取所有包和模块
for importer, modname, isPackage in pkgutil.walk_packages(path=[os.getcwd()]):
print([importer, modname, isPackage])
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'A', True]
[FileFinder('D:\\Program\\Python\\PackageDemo\\A'), 'A.a1', False]
[FileFinder('D:\\Program\\Python\\PackageDemo\\A'), 'A.a2', False]
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'B', True]
[FileFinder('D:\\Program\\Python\\PackageDemo\\B'), 'B.b1', False]
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'C', True]
[FileFinder('D:\\Program\\Python\\PackageDemo\\C'), 'C.c', True]
[FileFinder('D:\\Program\\Python\\PackageDemo\\C\\c'), 'C.c.c2', False]
[FileFinder('D:\\Program\\Python\\PackageDemo\\C'), 'C.c1', False]
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'main', False]
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'test', False]
2、获取所有的包(iter_modules不迭代,而walk.packages迭代)
for file_path, file_name, isPackage in pkgutil.iter_modules(path=[os.getcwd()]):
print([file_path, file_name, isPackage])
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'A', True]
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'B', True]
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'C', True]
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'main', False]
[FileFinder('D:\\Program\\Python\\PackageDemo'), 'test', False]
3、获取某个包下的所有包和模块
for file_path, file_name, isPackage in pkgutil.iter_modules(C.__path__, C.__name__ + "."):
print([file_path, file_name, isPackage])
[FileFinder('D:\\Program\\Python\\PackageDemo\\C'), 'C.c', True]
[FileFinder('D:\\Program\\Python\\PackageDemo\\C'), 'C.c1', False]