gpt4 book ai didi

python - 如何确定 PyPI 包中可用的模块

转载 作者:行者123 更新时间:2023-11-28 22:09:25 25 4
gpt4 key购买 nike

给定一个 PyPI 包名称,例如 PyYAML ,如何以编程方式确定可以导入的包(分发包)中可用的模块?

详情

我对 PyYAML 不是特别感兴趣,它只是一个流行的 PyPI 包的一个很好的例子,它有一个不同的包名 ( PyYAML )从它的主要模块名称 ( yaml )这样你就不能轻易地从包名中猜出模块名。

我看到其他问题的答案听起来像这样但不同,可能是因为命名冲突

  • package意思是允许模块集合的 python 构造
  • package意思是“分发包”,一个存档文件包含用于分发 Release 的 Python 包、模块和其他资源文件。

我的问题是关于分发包和其中的模块之间的关系。

可能的解决方案空间

看起来可能富有成效的领域(但我还没有取得成功)是:

  • pydoc.help功能(显示为 help built-in )当作为 help('modules') 调用时,输出所有可用 模块的完整列表。这显示尚未导入但可能导入的模块。它以人类可读的形式输出到标准输出,我一直无法弄清楚如何the pydoc code枚举模块。
    • 我可以想象调用它,收集模块列表,将新的分发包安装到 virtualenv 中以编程方式 pip,再次调用它并比较结果。
  • 使用 pip 以编程方式安装分发包,以便
    • 遍历 python 路径的元素以查找模块

最佳答案

我的项目 johnnydep正是提供了这个功能:

$ johnnydep --fields=import_names PyYAML
name import_names
------ --------------
PyYAML yaml

请注意,有些发行版导出多个顶级名称,有些发行版根本不导出,并且发行版名称(与 pip install 命令一起使用)和包名称(与 import 语句一起使用)- 尽管这是匹配它们的常见约定。

例如热门项目setuptools公开三个顶级名称:

$ johnnydep --fields=import_names setuptools 
name import_names
---------- ---------------------------------------
setuptools easy_install, pkg_resources, setuptools

API 使用是通过属性访问:

>>> from johnnydep.lib import JohnnyDist
>>> jdist = JohnnyDist("setuptools")
>>> jdist.import_names
['easy_install', 'pkg_resources', 'setuptools']

如果您有兴趣了解子模块名称,而不是顶级名称,那可以使用 stdlib pkgutil ,例如:

>>> import pkgutil, requests
>>> [name for finder, name, ispkg in pkgutil.walk_packages(requests.__path__)]
['__version__',
'_internal_utils',
'adapters',
'api',
'auth',
'certs',
'compat',
'cookies',
'exceptions',
'help',
'hooks',
'models',
'packages',
'sessions',
'status_codes',
'structures',
'utils']

关于python - 如何确定 PyPI 包中可用的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57681500/

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