我环顾四周,没有找到解决方案。我想做的是在运行时获取 Python 中所有可用包的列表。
我看了这些:
- List all the modules that are part of a python package?
- Python package structure
- How to: get list of modules in a package
但它们不是我要找的。p>
我试图这样做:
import pkgutil
for pkg in pkgutil.walk_packages():
print(pkg) # or do something with them...
但是,当我做 this :
import sys
sys.modules.keys()
看来我已经加载了所有不是我想做的包,我想要的是当前 Python 安装可用的所有包+模块的字符串列表,而不加载它们一切都在我做的时候。
最佳答案
好吧,我很好奇,我深入研究了 pkgutil
,然后我想到了这个,它比我预期的要简单得多:
list(pkgutil.iter_modules())
它列出了所有可用的顶级包/模块,无论是常规文件还是 zip 包,但不加载它们。它不会看到其他类型的包,除非它们正确地注册到 pkgutil
内部。
每个返回的条目都是一个包含以下项目的三元组:
module_finder
:找到模块的文件查找器实例name
: 模块名称ispkg
:一个 bool 值,指定它是常规模块还是包。
示例 3 元组:
(FileFinder('/usr/lib/python3/dist-packages'), 'PIL', True)
而且我可以确认这没有加载 PIL 包:
In [11]: sys.modules['PIL']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-11-b0fc0af6cc34> in <module>()
----> 1 sys.modules['PIL']
KeyError: 'PIL'
关于python - 如何从 Python 脚本中列出 Python 可用的所有包/模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752054/