将“导入”名称映射到PyPI名称?

2024-09-29 21:43:39 发布

您现在位置:Python中文网/ 问答频道 /正文

这是用于pydeps --externalshttps://github.com/thebjorn/pydeps)的工作,它列出了由模块导入的外部包,例如:

c:\github\pydeps> pydeps --externals pydeps
[
    "configparser",
    "enum",
    "stdlib_list",
    "yaml"
]

这意味着这四个模块是需要安装的依赖包的唯一导入(*)。例如,这可以输入到创建(或检查)一个requirements.txt文件的东西中。你知道吗

我意识到所有四行都有问题,但是这个问题涉及最后两行(stdlib_listyaml),它们分别来自名为stdlib-listPyYAML的包(*)。你知道吗

IIUC即使安装了依赖项,也无法从模块名中找到包名。这仍然正确吗?你知道吗

我找到了site-packages/*.dist-info/top_level.txt,但似乎我不能相信这个文件总是存在(https://www.python.org/dev/peps/pep-0427/#the-dist-info-directory)。这样就可以在site-packages/*.dist-info/RECORD中搜索<importname>/__init__.pyc?是否有用于访问此信息的现有API?pkginfo看起来很有希望,但不是:

import pkginfo, stdlib_list
print pkginfo.Installed(yaml).package_name    # print "yaml"

另一个选项是保留module/import name->;package/pip install name的大型映射。我看到其他人也有这个想法,例如https://github.com/bndr/pipreqs/blob/master/pipreqs/mapping,但是有没有更正式的方法(或者pypi包?)你知道吗

(*)我还没有找到任何唯一的和一致使用的名称来表示pip install-ed的“thing”。我尝试将该“thing”称为,以及为模块导入的“things”--我确信这是有争议的;-)


Tags: 模块文件namehttpsinfogithubtxtcom

热门问题