动态获取标准库 python 包名称列表
Dynamically getting a list of standard library python packages names
我想获取所有标准库包的名称列表。
我的意思是我想解析 https://docs.python.org/3/library/ 上列出的那些:
字符串 name
其中
__import__(name)
sys.builtin_module_names
看起来很有希望,但事实并非如此。
我想过解析 ~/.pyenv/versions/3.8.6/lib/python3.8/
或 https://docs.python.org/3/library/,但肯定有更好的方法!
附录
对于那些需要 X for a Y 的人:我正在静态导航包的导入以分析它们——即查看使用了哪些第三方包、哪些标准库、以何种频率等.
我将post我的解决方案放在这里,但会先看看是否有更好的解决方案,然后再接受它作为答案。
安装 unbox
并执行此操作:
from unbox import builtin_module_names
这应该为您的环境的 python 版本设置名称(支持 2.7 和 3.5-3.9)。
为了得到这些,我从 https://docs.python.org/{version}/library/
html 页中解析了列表,并过滤掉了那些不可导入的(来自 3.8)。您可以通过以下操作验证所有名称是否可导入:
for name in builtin_module_names:
_ = importlib.import_module(name)
这些名称包含在包的数据文件夹中(作为 .csv 文件),可以在 here on github.
中找到
请注意,您不会在那里找到所有模块 -- 只有那些 (1) 在所述页面 和 上记录的可导入模块。例如,this
和 antigravity
等彩蛋将不会列出。您可以在更大的 scanned_standard_lib_names
集合中找到它们,通过扫描本地文件获得:
from unbox import scanned_standard_lib_names
assert scanned_standard_lib_names.issuperset({'this', 'antigravity'})
我想获取所有标准库包的名称列表。
我的意思是我想解析 https://docs.python.org/3/library/ 上列出的那些:
字符串 name
其中
__import__(name)
sys.builtin_module_names
看起来很有希望,但事实并非如此。
我想过解析 ~/.pyenv/versions/3.8.6/lib/python3.8/
或 https://docs.python.org/3/library/,但肯定有更好的方法!
附录
对于那些需要 X for a Y 的人:我正在静态导航包的导入以分析它们——即查看使用了哪些第三方包、哪些标准库、以何种频率等.
我将post我的解决方案放在这里,但会先看看是否有更好的解决方案,然后再接受它作为答案。
安装 unbox
并执行此操作:
from unbox import builtin_module_names
这应该为您的环境的 python 版本设置名称(支持 2.7 和 3.5-3.9)。
为了得到这些,我从 https://docs.python.org/{version}/library/
html 页中解析了列表,并过滤掉了那些不可导入的(来自 3.8)。您可以通过以下操作验证所有名称是否可导入:
for name in builtin_module_names:
_ = importlib.import_module(name)
这些名称包含在包的数据文件夹中(作为 .csv 文件),可以在 here on github.
中找到请注意,您不会在那里找到所有模块 -- 只有那些 (1) 在所述页面 和 上记录的可导入模块。例如,this
和 antigravity
等彩蛋将不会列出。您可以在更大的 scanned_standard_lib_names
集合中找到它们,通过扫描本地文件获得:
from unbox import scanned_standard_lib_names
assert scanned_standard_lib_names.issuperset({'this', 'antigravity'})