是否可以以确定的方式设置Debian系统?

2024-04-28 20:48:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在工作中,我们开发了一些在Raspbian(基于Debian)上运行的Python软件,该软件基于Raspberry Pi

我们有一些Ansible脚本,可以获取一个新的Raspbian映像,在Raspberry Pi上启动,并将其配置为运行我们的软件。Ansible做了几件事:

  • 使用apt安装一些必需的软件包
  • 设置Python虚拟环境,并使用pip和需求文件安装运行软件所需的Python库的确切版本

每次Ansible运行时,它都会安装我们测试软件所用的Python库的确切版本(来自PyPi),这一点非常好。不幸的是,这不适用于通过apt安装的软件包

执行apt-get install package或Ansible等效程序将安装该软件包的最新版本。今天的版本可能与明天的版本不同。这意味着,如果我今天运行Ansible脚本来安装Raspberry Pi,我的软件可能会工作得很好,但明天在新的Raspberry Pi上运行Ansible可能会安装apt的新版本软件,这可能会破坏我们的软件

除了apt,还有什么方法可以做pip所做的事情吗?冻结当前安装的软件包版本,以后在新系统上安装时,是否安装这些软件包的确切版本?或者类似的东西

我知道我们可以安装我们想要的任何版本的软件包,并将SD卡克隆到其他PI上,但这种做法一开始就违背了使用Ansible脚本的目的


Tags: pip文件版本脚本pypi软件虚拟环境pi
2条回答

有一个工具值得一提https://github.com/TrevorSundberg/apt-lock

A wrapper around apt and apt-get that enforces package install determinism. Inspired by package-lock.json from npm.

使用ansible,您可以指定以这种方式安装哪个版本的packge

- name: Install the version '1.00' of package "foo"
  apt:
    name: foo=1.00

然后,为了防止在系统升级时升级包,请以这种方式将包标记为hold

- dpkg_selections:
    name: python
    selection: hold

相关问题 更多 >