假设我想在 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 的包。