首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GUIX中输入重写时如何使用劣质?

在GUIX中输入重写时如何使用劣质?
EN

Unix & Linux用户
提问于 2022-04-15 08:26:32
回答 1查看 137关注 0票数 0

郭氏下级手册指出

因此,您可以在任何地方插入一个劣质包:在清单中,在操作系统声明的packages字段中,等等。

但是,在重写包的输入时,我不知道如何使用劣值。例如,基于定义手册中的包变体部分的这个清单不适用于我:

代码语言:javascript
复制
(use-modules (guix inferior) (guix channels) (guix packages)
             (srfi srfi-1))
(use-package-modules docker)
(use-package-modules python-xyz)

(define mychannels
  (list (channel
         (name 'guix)
         (url "https://git.savannah.gnu.org/git/guix.git")
         ;; Last commit that still has python-pyyaml 5.4.1.
         (commit
          "d3e1a94391a838332b0565d56762a58cf87ac6b1"))))

(define myinferior
  (inferior-for-channels mychannels))

(define pyyaml5
  (first (lookup-inferior-packages myinferior "python-pyyaml")))


(define pyyaml5-instead-of-pyyaml6
  ;; This is a procedure to replace pyyaml 6.0 by pyyaml 5.4.1.

  ;; The line below does not work, raises this error:
  ;; In procedure package-properties: Wrong type argument:
  ;; #<inferior-package python-pyyaml@5.4.1 7f42653831b0>
  (package-input-rewriting `((,python-pyyaml . , pyyaml5)))

  ;; The line below does work (and has a similar result).
  ;(package-input-rewriting `((,python-pyyaml . , python-pyyaml-for-awscli)))
  )

(define docker-compose-with-pyyaml5
  (pyyaml5-instead-of-pyyaml6 docker-compose))

(packages->manifest
 (list pyyaml5
       (specification->package "python")
       docker-compose-with-pyyaml5
       ))

docker-compose只适用于python-pyyaml 5.4.1,通道中的版本已升级到6.0。因此,我试图进行的重写是将输入重写到docker-compose,以便使用通道的早期版本的python-pyyaml 5.4.1。然而,我的尝试失败了

代码语言:javascript
复制
Backtrace:
In guix/packages.scm:
  1269:17 19 (supported-package? #<package docker-compose@1.29.2 gu…> …)
In guix/memoization.scm:
    101:0 18 (_ #<hash-table 7fa05e6274c0 152/223> #<package docker…> …)
In guix/packages.scm:
  1247:37 17 (_)
  1507:16 16 (package->bag _ _ _ #:graft? _)
  1608:48 15 (thunk)
  1403:25 14 (inputs _)
In srfi/srfi-1.scm:
   586:29 13 (map1 (("python-cached-property" #<package python-…>) …))
   586:29 12 (map1 (("python-distro" #<package python-distro@1.…>) …))
   586:29 11 (map1 (("python-docker" #<package python-docker@5.…>) …))
   586:29 10 (map1 (("python-dockerpty" #<package python-docker…>) …))
   586:29  9 (map1 (("python-docopt" #<package python-docopt@0.…>) …))
   586:29  8 (map1 (("python-dotenv" #<package python-dotenv@0.…>) …))
   586:29  7 (map1 (("python-jsonschema" #<package python-jsons…>) …))
   586:17  6 (map1 (("python-pyyaml" #<package python-pyyaml@6.…>) …))
In guix/packages.scm:
  1360:20  5 (rewrite ("python-pyyaml" #<package python-pyyaml@6.0…>))
In guix/memoization.scm:
    101:0  4 (_ #<hash-table 7fa06ac0b540 8/31> #<package python-py…> …)
In guix/packages.scm:
  1377:22  3 (_)
  1435:37  2 (loop #<inferior-package python-pyyaml@5.4.1 7fa06304b3…>)
In ice-9/boot-9.scm:
  1685:16  1 (raise-exception _ #:continuable? _)
  1685:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure package-properties: Wrong type argument: #<inferior-package python-pyyaml@5.4.1 7fa06304b3f0>

我怎么能用低劣的方式重写输入呢?

显然,现在频道中有一个名为python-pyyaml 5.4.1的python-pyyaml-for-awscli。使用该包重写docker-compose的输入确实像预期的那样工作,因此,据我所知,在重写输入时,我使用了正确的语法。(我不知道背勾、点和逗号是怎么回事,可能是哪里出错了。)

(至于XY问题,我现在可以使用docker-compose运行python-pyaml-for-awscli,但是我仍然对如何使用劣等程序感兴趣,因为接下来可能没有这样的包。)

EN

回答 1

Unix & Linux用户

发布于 2022-04-15 10:06:20

显然,现在Guix1.3.0中还没有一个modify-inputs函数,我不知道是否有可以链接到的“夜间”文档。

这样做是可行的:

代码语言:javascript
复制
(use-modules (guix inferior) (guix channels) (guix packages)
             (srfi srfi-1))
(use-package-modules docker)
(use-package-modules python-xyz)

(define mychannels
  (list (channel
         (name 'guix)
         (url "https://git.savannah.gnu.org/git/guix.git")
         ;; Last commit with pyyaml 5.4.1.
         (commit
          "d3e1a94391a838332b0565d56762a58cf87ac6b1"))))

(define myinferior
  (inferior-for-channels mychannels))

(define pyyaml5
  (first (lookup-inferior-packages myinferior "python-pyyaml")))


(define (also-pyyaml5-instead-of-pyyaml6 apackage)
  ;; This is a procedure to replace pyyaml 6.0 by pyyaml 5.4.1.
  (package
   (inherit apackage)
   (inputs
    (modify-inputs (package-inputs apackage)
                   (replace "python-pyyaml" pyyaml5)))))

(define also-docker-compose-with-pyyaml5
  (also-pyyaml5-instead-of-pyyaml6 docker-compose))

(packages->manifest
 (list python-pyyaml
       (specification->package "python")
       also-docker-compose-with-pyyaml5))

现在,docker-compose使用python-pyyaml的5.4.1版本,而配置文件的其余部分使用6.0。

我仍然不清楚是否可以在package-input-rewriting中使用下位用户,但是使用modify-inputs实现了同样的目的,而且它是有效的。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/699148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档