gpt4 book ai didi

python - 如何确定模块名称是否是 python 标准库的一部分

转载 作者:行者123 更新时间:2023-12-04 12:16:54 24 4
gpt4 key购买 nike

我有一个模块名称 作为字符串 (例如“日志记录”)通过查询 给出模块 对象的属性。

如何区分属于我的项目的模块和属于 python 标准库的模块?

我知道我可以使用 pip.get_installed_distributions() 检查这个模块是否是由 pip 安装的,但这些与标准库无关

注意:我正在使用 python 2.7,因此仅在 python 3.x 中有效的解决方案不太相关。

不像答案here ,我一直在寻找一种可以在 O(1) 中运行的解决方案,并且不需要保存结果数组,也不需要为每个查询扫描目录。

谢谢。

最佳答案

上面的解决方案都不是我想要的,所以我用另一种方式做了。在这里发帖以防对任何人有用。

import os

def standard_lib_names_gen(include_underscored=False):
standard_lib_dir = os.path.dirname(os.__file__)
for filename in os.listdir(standard_lib_dir):
if not include_underscored and filename.startswith('_'):
continue
filepath = os.path.join(standard_lib_dir, filename)
name, ext = os.path.splitext(filename)
if filename.endswith('.py') and os.path.isfile(filepath):
if str.isidentifier(name):
yield name
elif os.path.isdir(filepath) and '__init__.py' in os.listdir(filepath):
yield name

>>> standard_lib_names = set(standard_lib_names_gen(include_underscored=True))
>>> # verify that a few known libs are there (including three folders and three py files)
>>> assert {'collections', 'asyncio', 'os', 'dis', '__future__'}.issubset(standard_lib_names)
>>> # verify that other decoys are not in there
>>> assert {'__pycache__', 'LICENSE.txt', 'config-3.8-darwin', '.DS_Store'}.isdisjoint(standard_lib_names)
>>>
>>> len(standard_lib_names)
200
>>>
>>> # not including underscored
>>> standard_lib_names = set(standard_lib_names_gen(include_underscored=False))
>>> len(standard_lib_names)
184

关于python - 如何确定模块名称是否是 python 标准库的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46441539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com