30

我喜欢如何使用 pip 要求管理依赖项。在 apt-get 的情况下是否有类似的东西?

http://www.pip-installer.org/en/latest/requirements.html#requirements-file-format

4

4 回答 4

37

您的问题是您希望在一个文件中包含系统依赖项列表,以便能够使用一个命令安装它。

我不建议您在系统依赖项中包含软件包的版本。在“ build-essential ”或“ uuid-dev ”等软系统依赖项中,您通常需要最新版本的软件包。在诸如 python、postgres 或其他的“硬依赖”中,通常版本是在包本身的名称中指定的,例如“ python2.6-dev ”或“ postgresql-8.4 ”。您可能在定义软件包的确切版本时遇到的另一个问题是, postgresql-8.4的 8.4.11-1 版本可能在三个月或一年后不会在存储库中可用,您最终将安装当前版本在回购中。

例子。您可以使用项目所需的系统包创建一个名为“requirements.system”的文件:

python-virtualenv
python2.6-dev
uuid-dev
python-pip
postgresql-8.4

然后,在您的 INSTALL 文件中说明如何安装系统包。

# Install system depencences by running
cat ~/project/install/requirements.system | xargs sudo aptitude install

我们已经运行这个配置大约两年了,不得不从头开始重新创建环境几次,我们从来没有遇到过问题。

于 2012-04-12T11:57:05.373 回答
9

我们在工作中使用aptfile格式。它只是一个内置了一些帮助程序的 bash 包装器。

于 2016-03-26T04:05:13.810 回答
0

我通常使用apt list --installed | awk -F/ '{print $1}' | grep -v Listing... > installed_packages.txt.

解释:

  • apt list --installed回显当前安装的软件包列表,包括版本
  • awk -F/ '{print $1}'摆脱软件包版本,这使文件独立于您的发行版(Mint、Ubuntu、Debian 稳定/测试之间的下游兼容性,上游不是必需的)
  • grep -v Listing...摆脱 apt 的“交互式”显示(第一行)
  • 然后所有这些都通过管道传输到单个文件

然后,您可以通过cat installed_packages.txt | xargs apt install -y使用所述文件的每一行作为 apt 的参数在另一个系统上安装。

于 2021-03-31T11:35:12.673 回答
-1

由于 apt 接受来自 stdin 的输入,因此最简单的方法是:

$ cat requirement.txt
gcc
cmake

$ apt install < requirement.txt
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
于 2020-04-25T01:32:31.300 回答