apt-get的要求文件,类似于pip的要求文件

34

你能举个例子来说明你的意思吗? - James Hurford
1
你是指版本依赖关系吗?如果是,那么答案是肯定的。没有版本依赖关系,任何软件包管理器都不完整。 - Kien Truong
我的意思是要有一个requirements.txt文件,以便批量安装软件包。 - Vladimir Keleshev
您可以创建元包来批量安装软件包。只需将这些软件包指定为元包的依赖项即可。 - Kien Truong
这个解决方案还允许您在需求文件中添加注释:https://www.monolune.com/installing-apt-packages-from-a-requirements-file/ - Flux
4个回答

40

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

我不推荐将软件系统依赖项的版本包含在其中。例如像"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 system depencences by running
cat ~/project/install/requirements.system | xargs sudo aptitude install

我们已经使用这个配置运行了大约两年时间,有几次需要从头重新创建环境,但我们从未遇到过任何问题。


6
您可以通过类似于pip的方式使用 package_name=version(例如python-virtualenv=1.7.1.2-1)来添加软件包的版本号。但是,这种方法可能没有pip那么有用,因为Debian镜像不像PyPI存储库那样维护大量旧版软件包。 - C2H5OH
1
有时候你想要指定版本,因为某些 dpkg 真的非常糟糕。我记得 memecache 或类似的软件需要一些过时的版本,否则它将无法安装。这是一个特殊情况,所以有时候这是一件好事。此外,如果您的系统已知在特定状态下运行良好,您希望重现该状态。如果您需要最新版本,则标准部署工作流程是使用您指定的要求(但具有最新版本)从头开始创建新环境,并对其进行测试。 - CppLearner
9
无需猫:xargs apt-get install <reqs.txt。 (注:该命令意为不需要使用“cat”命令,直接用“xargs”和“apt-get install”命令并结合输入重定向符“<”来安装“reqs.txt”文件中所列出的软件包。) - arand

9

我们在工作中使用 aptfile格式。它只是一个带有一些内置助手的bash包装器。


简单易用。 我可以使用 aptitude install 的方式吗? - Abhi
@Abhi 提交一个问题,我可能能够做到。 - Jose Diaz-Gonzalez
当然,我会提出一个问题!! - Abhi

2

我通常使用apt list --installed | awk -F/ '{print $1}' | grep -v Listing... > installed_packages.txt创建一个已安装软件包的列表。

解释:

  • apt list --installed会列出当前安装的软件包及其版本。
  • awk -F/ '{print $1}'会去掉软件包的版本,这使得该文件与您的发行版无关(在Mint、Ubuntu、Debian stable/testing之间有下游兼容性,但不一定是上游兼容性)。
  • grep -v Listing...去掉了apt的“交互式”显示(第一行)。
  • 所有这些都被导向到单个文件中。

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


-3

由于apt可以从标准输入接受输入,因此最简单的方法是:

$ 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.

1
据我所知,这根本没有任何作用,或者说,它与“apt install”命令的效果相同,不会安装任何东西。 - Daniele Procida

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接