如何在脚本中列出与导入对应的 PyPI 包的名称?

Posted

技术标签:

【中文标题】如何在脚本中列出与导入对应的 PyPI 包的名称?【英文标题】:How to list the names of PyPI packages corresponding to imports in a script? 【发布时间】:2016-08-05 23:17:36 【问题描述】:

有没有办法列出与脚本中导入的模块相对应的 PyPi 包名称?

例如导入模块scapy3k(这是它的名字)我需要使用

import scapy.all

但要安装的实际包是scapy-python3。后者是我希望从import 语句中找到的内容(我不在乎它的名称 - 在这种情况下为scapy3k)。

还有其他一些包的例子(我现在不知道),它们的 pip install 名称与之后在 import 中使用的名称完全不同。

【问题讨论】:

需要查找已经安装的模块名称还是必须安装的模块名称? @Francesco:这是一个很好的观点。我宁愿说一个我需要安装的模块。典型的用例是在系统 A 上开发的脚本,需要安装在系统 B(不同的操作系统)上。有一堆import,必须安装相关包。所以需要的是尚未安装的包的名称。 令人惊讶的是,我想不出办法。 如果您在虚拟环境中,请在已安装模块的系统上执行 pip freeze。结果将为您提供与 pip 一起使用的名称以在其他地方安装。即使不在venv,但列表会更长! 模块被称为scapy(你在import中使用的)。 scapy3k 是一个分支名称。 PyPI 包名是scapy-python3(你是什么pip install)。通常,这三个都是相同的。 【参考方案1】:

pypi 上列出的名称是在发行版的 setup.py / setup.cfg 文件中定义的name。不要求此名称与将要安装的包的名称相关。因此,没有 100% 可靠的方法来获取 pypi 上的发行版名称,只需给出它安装的包的名称(OP 评论中标识的用例)。

【讨论】:

以上是关于如何在脚本中列出与导入对应的 PyPI 包的名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyPI 上订阅包的更新?

Python 包依赖树

记录第一次制作pypi包的过程

Python模块与包的概念

给定 Python 包的名称,要导入的模块的名称是啥?

大写 PyPI 包的 Anaconda 问题