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

时间:2012-04-12 09:49:08

标签: python pip apt apt-get

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

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

4 个答案:

答案 0 :(得分:28)

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

我不建议您在系统依赖项中包含软件包的版本。在软件系统依赖中,例如“ build-essential ”或“ uuid-dev ”,您通常需要最新版本的软件包。在像python,postgres或其他类似的“硬依赖”中,通常版本在包本身的名称中指定,如“ python2.6-dev ”或“ postgresql-8.4 < / EM>”。您可能定义的软件包的确切版本的另一个问题是,可能在三个月或一年内, postgresql-8.4 的版本8.4.11-1将无法在存储库中使用,并且您将最终在repo中安装当前版本。

实施例。您可以使用项目所需的系统包创建名为“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

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

答案 1 :(得分:6)

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

答案 2 :(得分: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 的参数安装在另一个系统上。

答案 3 :(得分:-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.