【问题标题】:Requirements file for apt-get, similar to pipapt-get 的需求文件,类似于 pip
【发布时间】:2012-04-24 15:49:39
【问题描述】:

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

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

【问题讨论】:

  • 你能举例说明你的意思吗?
  • 你的意思是版本依赖?如果是这样,答案是肯定的。没有版本依赖,任何包管理器都是不完整的。
  • 我的意思是有一个 requirements.txt 文件以便批量安装软件包
  • 您可以创建元包来批量安装包。只需将这些包指定为元包的依赖项。
  • 此解决方案还允许您在需求文件中包含 cmets:monolune.com/installing-apt-packages-from-a-requirements-file

标签: python pip apt apt-get


【解决方案1】:

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

我不建议您在系统依赖项中包含软件包的版本。在“build-essential”或“uuid-dev”等软系统依赖项中,您通常需要最新版本的软件包。在像 python、postgres 或其他的“硬依赖”中,通常在包本身的名称中指定版本,如“python2.6-dev”或“postgresql-8.4”。您可能在定义软件包的确切版本时遇到的另一个问题是,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

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

【讨论】:

  • 您还可以添加软件包的版本号,类似于使用package_name=version (python-virtualenv=1.7.1.2-1) 的pip。但是,它可能不如 pip 有用,因为 Debian 镜像所维护的旧软件包版本不如 PyPI 存储库。
  • 有时你想指定版本,因为有些 dpkg 真的很糟糕。我记得 memecache 或类似的东西需要一些过时的版本,否则它将无法安装。这是一个角落案例,所以有时这是一件好事。此外,如果您的系统已知在特定状态下良好,您希望重现该状态。如果您需要最新版本,标准部署工作流程是使用您指定的要求(但使用最新版本)从头开始创建一个新环境,并对其进行测试。
  • 不需要猫:xargs apt-get install <reqs.txt
【解决方案2】:

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

【讨论】:

  • 简单易用。有没有办法可以使用aptitude install
  • @Abhi 提出问题,我也许可以做到。
  • 当然我会提出问题!
【解决方案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.

【讨论】:

  • 据我所知,这完全没有任何作用,或者更确切地说,它与apt install "" 做同样的事情并且不会安装任何东西。
【解决方案4】:

我通常使用apt list --installed | awk -F/ '{print $1}' | grep -v Listing... &gt; 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 的参数安装在另一个系统上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多