动态获取标准库python包名称列表

tho*_*len 6 python python-import

我想获得所有标准库包的名称列表。

通过这种方式,我的意思是那些我认为上市解析https://docs.python.org/3/library/:字符串name为其

__import__(name)
Run Code Online (Sandbox Code Playgroud)

sys.builtin_module_names 看起来很有希望,但事实并非如此。

我想过解析~/.pyenv/versions/3.8.6/lib/python3.8/https://docs.python.org/3/library/,但肯定有更好的方法!

附录

对于那些需要X 代表 Y 的人:我正在静态导航包的导入以分析它们——即,查看使用了哪些第三方包、哪些标准库、使用频率等。

tho*_*len 1

我将在这里发布我的解决方案,但在接受它作为答案之前会先看看是否有更好的解决方案。

安装unbox并执行以下操作:

from unbox import builtin_module_names
Run Code Online (Sandbox Code Playgroud)

这将为您的环境的 python 版本提供一组名称(支持 2.7 和 3.5-3.9)。

为了获得这些,我解析了 html 页面的列表https://docs.python.org/{version}/library/,并过滤掉了那些不可导入的页面(从 3.8 开始)。您可以通过执行以下操作来验证所有名称是否均可导入:

for name in builtin_module_names:
    _ = importlib.import_module(name)
Run Code Online (Sandbox Code Playgroud)

这些名称包含在包的数据文件夹中(作为 .csv 文件),并且可以在 github 上找到。

请注意,您不会在那里找到所有模块 - 只能找到 (1) 在所述页面上记录并且可导入的模块。例如,诸如this和 之类的复活节彩蛋antigravity就不会列出。scanned_standard_lib_names您可以在通过扫描本地文件获得的更大的集合中找到它们:

from unbox import scanned_standard_lib_names
assert scanned_standard_lib_names.issuperset({'this', 'antigravity'})
Run Code Online (Sandbox Code Playgroud)