如何确定给定 PyPI 包的 apt 包名称?

如何确定给定 PyPI 包的 apt 包名称?

假设我想在 Debian/Devuan 系统上安装一个 Python 包系统。某些 PyPI 软件包具有可通过存储库的 apt 源获取的 DEB 软件包,软件包名称前缀为python3-(或python-,取决于 Debian 版本)。但是——并非所有人都这样做。现在,我可以随时推出我自己的 DEB 包,但是 - 我如何知道我感兴趣的包是否是:

  • 实际上失踪了;
  • 可用,但使用另一个名称(较短的形式、较长的形式、传统名称现在在 PyPI 等上更改);或者
  • 可用,但与其他 PyPI 包捆绑在一起

?是否有一个简单的映射规则,或者我可以在某个地方使用 PyPI 包名称进行查询并获取 apt 包名称?

答案1

查找与给定 Python 包匹配的 Debian 包的最可靠方法是了解应如何导入后者。例如,熊猫数据库是进口的from pandasql;如果它在 Debian 软件包中可用,它将发布/usr/lib/python3/dist-packages/pandasql.

要确定此类软件包是否存在,请安装(apt-file如果尚不存在),并询问:

sudo apt update
apt-file search /usr/lib/python3/dist-packages/pandasql

如果包存在,apt-file会告诉你它的名字;如果没有找到任何内容,则该包不存在。

在大多数情况下,Python 二进制包应该反映其模块名称,但是有一些警告:

模块的二进制包foo如果模块名称允许,最好应该命名为。如果二进制包安装了多个模块,则不需要这样做,在这种情况下,维护者应选择最能代表该包的模块的名称。python3-foo

出于包命名的目的,用于模块的名称是可以与 一起使用的名称import,该名称不一定与 setuptoolsPKG-INFO以及.egg-info文件和目录中使用的名称相同。例如,中描述的模块pyxdg-*.egg-info是通过via使用的import xdg,因此它的包名称是python3-xdg而不是python3-pyxdg

答案2

诚实的答案是,您必须做出有根据的猜测或查找其中的文件。 (“有根据的猜测”确实包括apt search …使用 pypi 包名称等操作)

检查其中的文件:老实说,我只是进行 venv 安装,然后让它显示包含的文件。然后,选择一个看起来很重要、必然存在且足够独特的特定文件,并询问 Debian 打包基础设施哪个包包含这样命名的文件。例如,对于sigmf包:

python3 -m venv temporary_venv
source temporary_venv/bin/activate
pip install sigmf
pip show -f sigmf

从最后一个命令给我的文件列表中,我选择sigmf/sigmffile.py.听起来如果没有该文件,包就不会完整,而且也不是我在其他地方遇到的文件名。

(您现在可以rm -rf temporary_venv关闭该终端。没有触及任何其他内容。)

所以,

# apt-file might need to be installed first, `sudo apt install apt-file`
apt-file update
apt-file find sigmf/sigmffile.py

这不会产生任何结果,因此没有包含 sigmf 的包。

相关内容