如何在脚本中列出与导入对应的 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 包的名称?的主要内容,如果未能解决你的问题,请参考以下文章