GUIX 吸引我的部分原因是可以同时“安装”各种不同版本的软件包,而不会相互干扰。但我不知道如何实际使用这些不同的版本。
例如,最近,该pyyaml
软件包已从 5.4.1 升级到 6.0。由于各种原因,我想继续使用 5.4.1。(我只是在这里使用 pyyaml 作为示例。)我的商店中确实有旧版本:
$ ls -d1 /gnu/store/*pyyaml*
/gnu/store/22v8l25b33vs65wjd9ap28n772bvlih3-python-pyyaml-5.4.1/
/gnu/store/2j2s1jd6y8x7mlqjp968955misx1qw1c-python-pyyaml-6.0/
/gnu/store/54imz4x65s3xbjrgrfswgk815gfkhk4b-python-pyyaml-5.4.1/
/gnu/store/6537a8na1rbilffqqi642q0lipqfi2zg-python-pyyaml-5.4.1.drv
/gnu/store/6flrrmhq203vg6awdw7r2lsmzix4g2rh-python-pyyaml-6.0-guile-builder
/gnu/store/73k3qdz9rdh64pl7a0f0951zm2pbx5s2-python-pyyaml-5.4.1.drv
/gnu/store/7bcbwi93ihz8v2sdzmj6l9vhjqaxr14l-python-pyyaml-5.4.1-builder
...
如何使用这些旧版本?
仅单独使用这样的旧版本就可以了。例如,我希望这样的事情可以工作:
$ guix shell "[email protected]" python
guix shell: error: python-pyyaml: package not found for version 5.4.1
预计会出现此错误,因为旧版本在我的频道中不可用。所以也许有可能以某种方式指定要使用的旧版本的频道,但我不知道如何。
关于 XY 问题的侧节点,这个问题的直接原因是 docker-compose 现在不再工作了:
$ guix shell docker-compose
guix shell: error: build of `/gnu/store/8qhvnw5mwra9i6ji24xlywcpdl0rdznn-docker-compose-1.29.2.drv' failed
$ zcat /var/log/guix/drvs/8q/hvnw5mwra9i6ji24xlywcpdl0rdznn-docker-compose-1.29.2.drv.gz
...checking requirements: ERROR: docker-compose==1.29.2 ContextualVersionConflict(PyYAML 6.0 (/gnu/store/igfl4023dzvl8vi6xs1m96lcsr4fdw07-python-pyyaml-6.0/lib/python3.9/site-packages), Requirement.parse('PyYAML<6,>=3.10'), {'docker-compose'})
但是,我并不特别关心 docker-compose (wrt this question)。如果有的话,这个问题是我用 GUIX 原生工具替换它的旅程的一部分。
(另外,我知道 pyyaml 6 会强制其用户使用一些安全功能,因此不应再使用 pyyaml 5;pyyaml 仅用作示例。)