在工作中,我们开发了一些在 Raspberry Pi 上的 Raspbian(基于 Debian)上运行的 Python 软件。
我们有一些 Ansible 脚本,可以获取在 Raspberry Pi 上启动的新 Raspbian 镜像,并将其配置为运行我们的软件。 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 脚本的目的。
最佳答案
使用 ansible,您可以指定要安装的包版本。
- name: Install the version '1.00' of package "foo"
apt:
name: foo=1.00
然后为了防止在系统升级时升级软件包,将软件包标记为保持这种方式
- dpkg_selections:
name: python
selection: hold
关于python - 是否可以确定性地设置 Debian 系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61903495/