如何从安装工具安装 apt 依赖项?

如何从安装工具安装 apt 依赖项?

我正在尝试从 python 安装工具创建 deb 包。为此,我尝试添加 install_requires,如下所示关联 但看起来,这是针对 pip 模块的,而不是 apt 包。如何或在安装工具中在哪里设置依赖包?请帮我解决。

我的示例应用

我们可以使用安装工具将 python 包添加到创建的 deb 文件中。我们可以使用 fpm 将 apt 包添加为依赖项。但两者结合起来,不确定如何设置。即使我尝试使用安装工具 deb 文件作为 fpm deb 创建的源,但没有成功

还有一个选项,我尝试使用安装后脚本在最后安装 python 依赖项。您能否检查一下,安装后脚本不起作用。

为了测试,我创建了一个基本命令。

fpm -s empty -t deb -n test --after-install ./tmp/post-install.sh

post-install.sh内容很基础,用于测试。

#!/bin/bash
echo "testing install"
mkdir -p /tmp/testing
pip install torc

一旦创建了 deb 文件,就在 ubuntu 20 和 22 机器上进行测试,并出现以下错误,因为未找到安装后脚本。

vagrant@vagrant:~$ sudo apt install -y /vagrant/test_1.0_all.deb
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'test' instead of '/vagrant/test_1.0_all.deb'
The following NEW packages will be installed:
  test
0 upgraded, 1 newly installed, 0 to remove and 107 not upgraded.
Need to get 0 B/1,118 B of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 /vagrant/test_1.0_all.deb test all 1.0 [1,118 B]
Selecting previously unselected package test.
(Reading database ... 41035 files and directories currently installed.)
Preparing to unpack /vagrant/test_1.0_all.deb ...
Unpacking test (1.0) ...
Setting up test (1.0) ...
dpkg (subprocess): unable to execute installed test package post-installation script (/var/lib/dpkg/info/test.postinst): No such file or directory
dpkg: error processing package test (--configure):
installed test package post-installation script subprocess returned error exit status 2
Errors were encountered while processing:
test
E: Sub-process /usr/bin/dpkg returned an error code (1)

答案1

Python 软件包(例如通过 pip 在 PyPI 上)和 apt 存储库(例如 Debian 中的 debs)是不同的系统。Python 的打包系统只能包含 Python 代码和绑定,请注意,它们安装到 Python 路径下的各种站点包目录中。(这种单独的系统对我来说有点烦人,即使我知道没有一种可移植的方式来统一所有软件包。)

无法满足您的 setup.py 对 net-tools 等的依赖。Python 打包不了解 apt,也不了解其他操作系统发行版的包管理器。

从 install_requires 中删除 PyPI 索引中没有的所有内容。只留下可以使用 setuptools 安装的内容。可能没有,但看一眼你所拥有的内容就会发现使用了 Python 标准库。

记录非 Python 包的依赖关系,可能使用独立的 shell 脚本或安装它们的 Makefile。

考虑创建包装此 python 应用程序的 deb 包,与Debian Python 政策。优点包括能够将依赖项放在包元数据中,这样 apt 就可以自动为您安装它们。它仍然是一个 setuptools 安装的 Python 应用程序,但包含在 deb 中。

其中有几个现在未被你的 Python 程序使用'git','tmux','screen','vim','emacs','htop','valgrind'。作为一个不熟悉你在做什么的人,我想知道为什么一个东西需要 tmux 和 screen。将此程序的强制性要求与你在系统上安装的软件包愿望清单分开。一个只是为了收集个人偏好的软件包理想情况下没有代码,以便与执行操作的程序分离。

调用程序来执行系统管理工作让我想起了现有的自动化脚本框架 Ansible。ansible-core 几乎没有 Python 依赖项,但会根据您正在执行的操作调用各种外部程序或第三方库。按照惯例,代码会在运行时小心地检测缺失的内容并告知用户。在此之前错过检测依赖项并不理想,但从 Python 包中,没有明显的方法依赖于非 Python 的东西。尤其是当这需要适用于不同的 Linux、BSD 和 Unix 环境时,就像 Ansible 一样。

相关内容