Guix Package Study: plover-python-dictionary

Table of Contents

Overview

This case study walks through packaging the plover-python-dictionary plugin within Guix. The plugin allows Plover to load Python steno dictionaries. Plover version 4.0.0.dev8 was packaged at the time and could not load Python dictionaries by default.

Steps

1. Create a build environment

The guix environment command creates a new shell with the dependencies for a given package installed, but not the package itself. Any dependencies are installed if they're not already present on the system. It seems reasonable to assume that the dependencies needed to build Plover would work for the plover-python-dictionary plugin. At the very least, such an environment should provide a good starting point. The following creates and activates a Plover build environment.

guix environment plover

2. Determine the package source

The plover-python-dictionary is available on GitHub and PyPI. Both sources could be used to build the Guix package. However, it may be easier to use the PyPI source. Guix provides a helper function, guix import, which will try to generate a package definition using PyPI's package definition. It will also recursively generate definitions for all the base package's dependencies.

3. Create a package definition

Since the plover-python-dictionary plugin is on PyPI, guix import can be used. Use a redirect to create a file containing the output of guix import.

guix import pypi --recursive plover-python-dictionary > plover-python-dictionary.scm
Starting download of /tmp/guix-file.27SM09
From https://files.pythonhosted.org/packages/8d/ab/bcffe845da95f30fc9871ee0423570ad780c7b13c7b1a740da12cc7f5cfc/plover_python_dictionary-1.1.0.tar.gz...
 ...ionary-1.1.0.tar.gz  5KiB           6.0MiB/s 00:00 [##################] 100.0%
 ...ionary-1.1.0.tar.gz  5KiB           715KiB/s 00:00 [##################] 100.0%

Starting download of /tmp/guix-file.0y99v8
From https://files.pythonhosted.org/packages/15/61/42845042f6ee303eb4a7c958eff4b0d8b063e93282a653a4dd233195c97c/plover_python_dictionary-1.1.0-py3-none-any.whl...
 ...y-1.1.0-py3-none-any.whl  4KiB      5.4MiB/s 00:00 [##################] 100.0%
 ...y-1.1.0-py3-none-any.whl  4KiB      2.8MiB/s 00:00 [##################] 100.0%

Starting download of /tmp/guix-file.sRZ71a
From https://files.pythonhosted.org/packages/c0/9e/4680b98378f8829ce4adeecc0f5a285381e20a3f8476fbb518b407c67046/plover-3.1.1.tar.gz...
 ...1.1.tar.gz  3.0MiB                  2.1MiB/s 00:00 [                  ]   2.1%
 ...1.1.tar.gz  3.0MiB                  4.3MiB/s 00:00 [#####             ]  33.1%
 ...1.1.tar.gz  3.0MiB                  4.8MiB/s 00:00 [############      ]  68.3%
 ...1.1.tar.gz  3.0MiB                  4.9MiB/s 00:01 [##################] 100.0%

Starting download of /tmp/guix-file.5EBnta
From https://files.pythonhosted.org/packages/58/6f/04bf293b59681f279f691377035e3b5c0eaa5d519aae6803156a7b469675/plover-3.1.1-py2.py3-none-any.whl...
 ....py3-none-any.whl  2.1MiB           2.6MiB/s 00:00 [                  ]   3.0%
 ....py3-none-any.whl  2.1MiB           4.8MiB/s 00:00 [#########         ]  54.1%
 ....py3-none-any.whl  2.1MiB           4.9MiB/s 00:00 [##################] 100.0%

Starting download of /tmp/guix-file.vLiI6a
From https://files.pythonhosted.org/packages/e9/bc/2d2c567fe5ac1924f35df879dbf529dd7e7cabd94745dc9d89024a934e76/appnope-0.1.2.tar.gz...
 ...1.2.tar.gz  4KiB                    2.2MiB/s 00:00 [##################] 100.0%
 ...1.2.tar.gz  4KiB                    1.6MiB/s 00:00 [##################] 100.0%

Starting download of /tmp/guix-file.xiPD27
From https://files.pythonhosted.org/packages/e4/fa/0c6c9786aa6927d12d100d322588e125e6ed466ab0a3d2d509ea18aeb56d/appnope-0.1.2-py2.py3-none-any.whl...
 ....py3-none-any.whl  4KiB             9.2MiB/s 00:00 [##################] 100.0%
 ....py3-none-any.whl  4KiB             5.5MiB/s 00:00 [##################] 100.0%

Starting download of /tmp/guix-file.YsLWQ7
From https://files.pythonhosted.org/packages/50/eb/a358e36731f5cb3b824ca27d2260f7f6acbd0d1f63c971ca83b4627d9ec6/pyobjc-core-7.3.tar.gz...
 ...-7.3.tar.gz  668KiB                 1.9MiB/s 00:00 [#                 ]   9.6%
 ...-7.3.tar.gz  668KiB                 4.8MiB/s 00:00 [##################] 100.0%

Starting download of /tmp/guix-file.OPsoS7
From https://files.pythonhosted.org/packages/88/9f/6778a9de41bc0b5602505b2ed92cc3ea242d5f2208ab41c3ad9ea3fdc18c/pyobjc_core-7.3-1-cp310-cp310-macosx_10_9_universal2.whl...
 ...0-macosx_10_9_universal2.whl  504KiB 1.9MiB/s 00:00 [##                ]  12.7%
 ...0-macosx_10_9_universal2.whl  504KiB 4.4MiB/s 00:00 [##################] 100.0%

Starting download of /tmp/guix-file.M2U1B8
From https://files.pythonhosted.org/packages/72/b8/ff4fad9271931746a38c0a253b26054d7a94720353d9ab8b9dd847f47e1f/pyobjc-framework-Cocoa-7.3.tar.gz...
 ...-Cocoa-7.3.tar.gz  3.3MiB           2.4MiB/s 00:00 [                  ]   1.9%
 ...-Cocoa-7.3.tar.gz  3.3MiB           4.7MiB/s 00:00 [######            ]  34.2%
 ...-Cocoa-7.3.tar.gz  3.3MiB           5.3MiB/s 00:00 [############      ]  72.1%
 ...-Cocoa-7.3.tar.gz  3.3MiB           5.5MiB/s 00:01 [##################] 100.0%

Starting download of /tmp/guix-file.2c5BJa
From https://files.pythonhosted.org/packages/ef/39/d1b6767500e9a78ef2d1290faa3011a064371d8d6aa4fe0668ca0e0177be/pyobjc_framework_Cocoa-7.3-1-cp310-cp310-macosx_10_9_universal2.whl...
 ...0-cp310-macosx_10_9_universal2.whl  369KiB 2.8MiB/s 00:00 [###               ]  17.3%
 ...0-cp310-macosx_10_9_universal2.whl  369KiB 4.8MiB/s 00:00 [##################] 100.0%

Starting download of /tmp/guix-file.6yf8N8
From https://files.pythonhosted.org/packages/92/77/d565a22274350f04bd9c5816d171c9e5cfd75e53b3f1dc52bb7171801ed3/pyobjc-framework-Quartz-7.3.tar.gz...
 ...Quartz-7.3.tar.gz  3.2MiB           3.6MiB/s 00:00 [                  ]   2.0%
 ...Quartz-7.3.tar.gz  3.2MiB           4.2MiB/s 00:00 [#####             ]  29.5%
 ...Quartz-7.3.tar.gz  3.2MiB           5.0MiB/s 00:00 [############      ]  68.9%
 ...Quartz-7.3.tar.gz  3.2MiB           5.3MiB/s 00:01 [##################] 100.0%

Starting download of /tmp/guix-file.3683T7
From https://files.pythonhosted.org/packages/8a/15/c04808fd18e5361889633d473a56d61433d830b9f6415d7c1011f2f7cb6c/pyobjc_framework_Quartz-7.3-1-cp310-cp310-macosx_10_9_universal2.whl...
 ...0-cp310-macosx_10_9_universal2.whl  222KiB 2.3MiB/s 00:00 [#####             ]  28.8%
 ...0-cp310-macosx_10_9_universal2.whl  222KiB 3.8MiB/s 00:00 [##################] 100.0%

The raw output looks like:

(define-public python-pyobjc-framework-quartz
    (package
    (name "python-pyobjc-framework-quartz")
    (version "7.3")
    (source
        (origin
        (method url-fetch)
        (uri (pypi-uri "pyobjc-framework-Quartz" version))
        (sha256
            (base32 "02ygxh0dhb5xagyvcxc3i9147kbmm0ihkxmxh3wxwqj2qd22i0cq"))))
    (build-system python-build-system)
    (propagated-inputs
        `(("python-pyobjc-core" ,python-pyobjc-core)
        ("python-pyobjc-framework-cocoa" ,python-pyobjc-framework-cocoa)))
    (home-page "https://github.com/ronaldoussoren/pyobjc")
    (synopsis "Wrappers for the Quartz frameworks on macOS")
    (description "Wrappers for the Quartz frameworks on macOS")
    (license license:expat)))

(define-public python-pyobjc-framework-cocoa
    (package
    (name "python-pyobjc-framework-cocoa")
    (version "7.3")
    (source
        (origin
        (method url-fetch)
        (uri (pypi-uri "pyobjc-framework-Cocoa" version))
        (sha256
            (base32 "0zhbp18i06aprwfbp06l9wm3qrzsdcyy9hwis5d4b8wmlzkhb3di"))))
    (build-system python-build-system)
    (propagated-inputs `(("python-pyobjc-core" ,python-pyobjc-core)))
    (home-page "https://github.com/ronaldoussoren/pyobjc")
    (synopsis "Wrappers for the Cocoa frameworks on macOS")
    (description "Wrappers for the Cocoa frameworks on macOS")
    (license license:expat)))

(define-public python-pyobjc-core
    (package
    (name "python-pyobjc-core")
    (version "7.3")
    (source
        (origin
        (method url-fetch)
        (uri (pypi-uri "pyobjc-core" version))
        (sha256
            (base32 "0x3msrzvcszlmladdpl64s48l52fwk4xlnnri8daq2mliggsx0ah"))))
    (build-system python-build-system)
    (home-page "https://github.com/ronaldoussoren/pyobjc")
    (synopsis "Python<->ObjC Interoperability Module")
    (description "Python<->ObjC Interoperability Module")
    (license license:expat)))

(define-public python-appnope
    (package
    (name "python-appnope")
    (version "0.1.2")
    (source
        (origin
        (method url-fetch)
        (uri (pypi-uri "appnope" version))
        (sha256
            (base32 "12i50gv145cl9qkf87av5aprq7qbcq601cvfiy1mh2a6bd5wv0yx"))))
    (build-system python-build-system)
    (home-page "http://github.com/minrk/appnope")
    (synopsis "Disable App Nap on macOS >= 10.9")
    (description "Disable App Nap on macOS >= 10.9")
    (license license:bsd-3)))
(define-public python-plover
    (package
    (name "python-plover")
    (version "3.1.1")
    (source
        (origin
        (method url-fetch)
        (uri (pypi-uri "plover" version))
        (sha256
            (base32 "1c2sz84g6n1y15g55sg8gkbja08kg2mmmbwxxhf3ibj0kg0d7gzl"))))
    (build-system python-build-system)
    (propagated-inputs
        `(("python-appdirs" ,python-appdirs)
        ("python-appnope" ,python-appnope)
        ("python-hidapi" ,python-hidapi)
        ("python-pyobjc-core" ,python-pyobjc-core)
        ("python-pyobjc-framework-cocoa" ,python-pyobjc-framework-cocoa)
        ("python-pyobjc-framework-quartz" ,python-pyobjc-framework-quartz)
        ("python-pyserial" ,python-pyserial)
        ("python-setuptools" ,python-setuptools)
        ("python-six" ,python-six)
        ("python-xlib" ,python-xlib)))
    (home-page "http://www.openstenoproject.org/")
    (synopsis "Open Source Stenography Software")
    (description "Open Source Stenography Software")
    (license #f)))
(define-public python-plover-python-dictionary
    (package
    (name "python-plover-python-dictionary")
    (version "1.1.0")
    (source
        (origin
        (method url-fetch)
        (uri (pypi-uri "plover-python-dictionary" version))
        (sha256
            (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2"))))
    (build-system python-build-system)
    (propagated-inputs `(("python-plover" ,python-plover)))
    (native-inputs
        `(("python-plover" ,python-plover) ("python-pytest" ,python-pytest)))
    (home-page "https://github.com/benoit-pierre/plover_python_dictionary")
    (synopsis "Python dictionaries support for Plover")
    (description "Python dictionaries support for Plover")
    (license #f)))

The output of guix import is not likely to work without modification. It doesn't include any module imports and, although it creates a definition, it doesn't return the package value. Fortunately, Guix will warn about these issues.

Notice that guix import outputs a definition for Plover v3.1.1 (marked in red). Plover used to be distributed on PyPI, but that stopped sometime around v4.0. The definition isn't needed (and might get in the way) since the goal is to build for Plover v4.0. Just delete it. There are other dependencies, like those for MacOS, which probably aren't relevant for Guix. Those can remain for now.

4. Handle package and module errors

Now that there's a package definition, try building to see if it works.

guix build -f plover-python-dictionary.scm
/home/ahab/Projects/excalamus.com/src/draft/guix/plover-python-dictionary.scm:9:3: error: package: unbound variable
hint: Did you forget `(use-modules (guix packages))'?

Follow the error messages. Try looking at other package definitions. Use guix edit to see definitions for a specific Guix package. Don't be ashamed to grep the package directory itself to figure out which module might work (e.g. gnu/packages or ~/.config/guix/current/share/guile/site/3.0/gnu/packages/).

The error message tells us that the guix module might work. Add it to the package definition.

(use-modules (guix packages))

Run again,

guix build -f plover-python-dictionary.scm
/home/ahab/Projects/excalamus.com/src/draft/guix/plover-python-dictionary.scm:9:16: error: url-fetch: unbound variable
hint: Did you forget `(use-modules (guix download))'?

Add what it says,

(use-modules
 (guix packages)
(guix download))

And try again,

guix build -f plover-python-dictionary.scm
/home/ahab/Projects/excalamus.com/src/draft/guix/plover-python-dictionary.scm:12:14: error: pypi-uri: unbound variable
hint: Did you forget a `use-modules' form?

The error message doesn't say which module is needed, only that one may be missing. It also says the pypi-uri variable is unbound. PyPi is a Python thing, so it's probably a Python related module. Maybe looking at the definition for Plover with guix edit might help? There are two Python related modules: python and python-xyz. These correspond to python.scm and python-xyz.scm. The string "pypi" isn't found anywhere in python.scm. Checking python-xyz.scm, what jumps out is that "pypi" is part of every package's definition in the file. That might be a clue later on if adding the python and python-xyz modules doesn't work. However, as it turns out, adding either module satisifies the error1. For now, just add the python module.

(use-modules
 (guix packages)
 (guix download)
(gnu packages python))

And that resolves the previous error. Run again…

guix build -f plover-python-dictionary.scm
/home/ahab/Projects/excalamus.com/src/draft/guix/plover-python-dictionary.scm:15:14: error: pypi-uri: unbound variable
hint: Did you forget `(use-modules (guix build-system python))'?

Add what it says…

(use-modules
 (guix packages)
 (guix download)
 (gnu packages python)
(guix build-system python))

…and build again.

guix build -f plover-python-dictionary.scm
/home/ahab/Projects/excalamus.com/src/draft/guix/plover-python-dictionary.scm:25:13: error: license:expat: unbound variable
hint: Did you forget a `use-modules' form?

Again, the hint isn't specific, but the error message mentions licensing. The definition for Plover is helpful. It contains a module for guix licenses. That's probably what's needed here. Copy that in and rerun.

(use-modules
 (guix packages)
 (guix download)
 (gnu packages python)
 (guix build-system python)
((guix licenses) #:prefix license:))

The module includes the optional "#:prefix" clause. The prefix is a symbol that is prepended to imported names. So, "license:" will be prepended to variables from that module. This prevents clashes with variables of the same name from different modules. For example, there is an "expat" license and an "expat" module2.

Try building again and a new error appears.

guix build -f plover-python-dictionary.scm
<unspecified>: not something we can build
<unspecified>'.
To fix this, add a Scheme expression at the end of the file that consists only of the package's variable name you defined, as in this example:

    (define-public my-package
        (package
        ...))

    my-package

The errors have mainly been about unbound variables up to this point. This error is different. Each of the define-public expressions, when evaluated, creates a variable binding visible from other modules that import the current module. The python-plover-python-dictionary package isn't available in the current namespace, however. Evaluating the symbol returns the package and satisfies the error.

Overall, the package definition to this point looks like:

(use-modules
 (guix packages)
 (guix download)
 (gnu packages python)
 (guix build-system python)
 ((guix licenses) #:prefix license:))

(define-public python-pyobjc-framework-quartz
  (package
   (name "python-pyobjc-framework-quartz")
   (version "7.3")
   (source
    (origin
     (method url-fetch)
     (uri (pypi-uri "pyobjc-framework-Quartz" version))
     (sha256
      (base32 "02ygxh0dhb5xagyvcxc3i9147kbmm0ihkxmxh3wxwqj2qd22i0cq"))))
   (build-system python-build-system)
   (propagated-inputs
    `(("python-pyobjc-core" ,python-pyobjc-core)
      ("python-pyobjc-framework-cocoa" ,python-pyobjc-framework-cocoa)))
   (home-page "https://github.com/ronaldoussoren/pyobjc")
   (synopsis "Wrappers for the Quartz frameworks on macOS")
   (description "Wrappers for the Quartz frameworks on macOS")
   (license license:expat)))

(define-public python-pyobjc-framework-cocoa
  (package
   (name "python-pyobjc-framework-cocoa")
   (version "7.3")
   (source
    (origin
     (method url-fetch)
     (uri (pypi-uri "pyobjc-framework-Cocoa" version))
     (sha256
      (base32 "0zhbp18i06aprwfbp06l9wm3qrzsdcyy9hwis5d4b8wmlzkhb3di"))))
   (build-system python-build-system)
   (propagated-inputs `(("python-pyobjc-core" ,python-pyobjc-core)))
   (home-page "https://github.com/ronaldoussoren/pyobjc")
   (synopsis "Wrappers for the Cocoa frameworks on macOS")
   (description "Wrappers for the Cocoa frameworks on macOS")
   (license license:expat)))

(define-public python-pyobjc-core
  (package
   (name "python-pyobjc-core")
   (version "7.3")
   (source
    (origin
     (method url-fetch)
     (uri (pypi-uri "pyobjc-core" version))
     (sha256
      (base32 "0x3msrzvcszlmladdpl64s48l52fwk4xlnnri8daq2mliggsx0ah"))))
   (build-system python-build-system)
   (home-page "https://github.com/ronaldoussoren/pyobjc")
   (synopsis "Python<->ObjC Interoperability Module")
   (description "Python<->ObjC Interoperability Module")
   (license license:expat)))

(define-public python-appnope
  (package
   (name "python-appnope")
   (version "0.1.2")
   (source
    (origin
     (method url-fetch)
     (uri (pypi-uri "appnope" version))
     (sha256
      (base32 "12i50gv145cl9qkf87av5aprq7qbcq601cvfiy1mh2a6bd5wv0yx"))))
   (build-system python-build-system)
   (home-page "http://github.com/minrk/appnope")
   (synopsis "Disable App Nap on macOS >= 10.9")
   (description "Disable App Nap on macOS >= 10.9")
   (license license:bsd-3)))

(define-public python-plover-python-dictionary
  (package
   (name "python-plover-python-dictionary")
   (version "1.1.0")
   (source
    (origin
     (method url-fetch)
     (uri (pypi-uri "plover-python-dictionary" version))
     (sha256
      (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2"))))
   (build-system python-build-system)
   (propagated-inputs `(("python-plover" ,python-plover)))
   (native-inputs
    `(("python-plover" ,python-plover) ("python-pytest" ,python-pytest)))
   (home-page "https://github.com/benoit-pierre/plover_python_dictionary")
   (synopsis "Python dictionaries support for Plover")
   (description "Python dictionaries support for Plover")
   (license #f)))

python-plover-python-dictionary

With the package expression at the end, try building again.

5. Keep handling errors until success

Adding the package expression and building again gives what follows.

guix build -f plover-python-dictionary.scm
/home/ahab/Projects/excalamus.com/src/draft/guix/plover-python-dictionary.scm:87:43: In procedure propagated-inputs:
error: python-plover: unbound variable
hint: Did you forget a `use-modules' form?

Here again is a hint about a potentially missing module. The message says that in the propagated-inputs, the "python-plover" variable is unbound. Propagated-inputs are a kind of input. The input field indicates that the dependencies listed are built for the target architecture during cross-compilation. The propagated-inputs field acts like input, but also inserts dependencies into the Guix profile alongside the final package. Recall (or understand) that packages are installed to the /gnu/store and a profile determines which of these are accessible to a user. A Guix profile is like a switchboard operator connecting user's requests for software with the binaries in the /gnu/store.

The error says there is no package known by the name "python-plover". Remember, however, that a definition for "python-plover" was removed from the guix import output (the snippet in red). Since the definition for python-plover-python-dictionary was also generated by the same process, the error must be saying the build process can't find Plover. It should be enough to replace the "python-plover" variable with a reference to a recent version of Plover. Using guix edit, the Plover package is found in the stenography.scm module and its name is "plover".

(use-modules
 (guix packages)
 (guix download)
 (gnu packages python)
 (guix build-system python)
 ((guix licenses) #:prefix license:)
(gnu packages stenography))
... (define-public python-plover-python-dictionary (package (name "python-plover-python-dictionary") (version "1.1.0") (source (origin (method url-fetch) (uri (pypi-uri "plover-python-dictionary" version)) (sha256 (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2")))) (build-system python-build-system)
(propagated-inputs `(("python-plover" ,python-plover)))
(propagated-inputs `(("python-plover" ,plover)))
(native-inputs `(("python-plover" ,python-plover) ("python-pytest" ,python-pytest))) (home-page "https://github.com/benoit-pierre/plover_python_dictionary") (synopsis "Python dictionaries support for Plover") (description "Python dictionaries support for Plover") (license #f)))

Import stenography, replace "python-plover" with "plover", and build again.

guix build -f plover-python-dictionary.scm
/home/ahab/Projects/excalamus.com/src/draft/guix/plover-python-dictionary.scm:90:26: In procedure native-inputs:
error: python-plover: unbound variable
hint: Did you forget a `use-modules' form?

Looks like the same thing is happening as above, but with native-inputs instead of propagated-inputs. The native-inputs field lists tools to be used at build time. It looks like Plover is needed to run tests since pytest is also in native-inputs.

(define-public python-plover-python-dictionary
  (package
    (name "python-plover-python-dictionary")
    (version "1.1.0")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "plover-python-dictionary" version))
        (sha256
          (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2"))))
    (build-system python-build-system)
    (propagated-inputs `(("python-plover" ,plover)))
    (native-inputs
`(("python-plover" ,python-plover) ("python-pytest" ,python-pytest)))
`(("python-plover" ,plover) ("python-pytest" ,python-pytest)))
(home-page "https://github.com/benoit-pierre/plover_python_dictionary") (synopsis "Python dictionaries support for Plover") (description "Python dictionaries support for Plover") (license #f)))

Make the replacement and build again.

guix build -f plover-python-dictionary.scm
/home/ahab/Projects/excalamus.com/src/draft/guix/plover-python-dictionary.scm:90:52: In procedure native-inputs:
error: python-pytest: unbound variable
hint: Did you forget `(use-modules (gnu packages check))'?

It looks like the (gnu packages check) module is needed for pytest.

(use-modules
 (guix packages)
 (guix download)
 (gnu packages python)
 (guix build-system python)
 ((guix licenses) #:prefix license:)
 (gnu packages stenography)
(gnu packages check))

Add the module and run again.

guix build -f plover-python-dictionary.scm
substitute: updating substitutes from 'https://ci.guix.gnu.org'...  50.0%
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'...  50.0%
substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 100.0%
The following derivations will be built:
   /gnu/store/hg96jp1xli47i80si5gkdy2h4cnlrip7-python-plover-python-dictionary-1.1.0.drv
   /gnu/store/shvfsw07pyh4kf23i2wy5ja55b31sy75-plover-python-dictionary-1.1.0.tar.gz.drv
building /gnu/store/shvfsw07pyh4kf23i2wy5ja55b31sy75-plover-python-dictionary-1.1.0.tar.gz.drv...

Starting download of /gnu/store/6dr8w3b1lgh3n7p16sfl98p8jxd9x6rd-plover-python-dictionary-1.1.0.tar.gz
From https://files.pythonhosted.org/packages/source/p/plover-python-dictionary/plover-python-dictionary-1.1.0.tar.gz...
download failed "https://files.pythonhosted.org/packages/source/p/plover-python-dictionary/plover-python-dictionary-1.1.0.tar.gz" 404 "Not Found"

Starting download of /gnu/store/6dr8w3b1lgh3n7p16sfl98p8jxd9x6rd-plover-python-dictionary-1.1.0.tar.gz
From https://ci.guix.gnu.org/file/plover-python-dictionary-1.1.0.tar.gz/sha256/02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2...
download failed "https://ci.guix.gnu.org/file/plover-python-dictionary-1.1.0.tar.gz/sha256/02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2" 404 "Not Found"

Starting download of /gnu/store/6dr8w3b1lgh3n7p16sfl98p8jxd9x6rd-plover-python-dictionary-1.1.0.tar.gz
From https://tarballs.nixos.org/sha256/02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2...
download failed "https://tarballs.nixos.org/sha256/02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2" 404 "Not Found"

Starting download of /gnu/store/6dr8w3b1lgh3n7p16sfl98p8jxd9x6rd-plover-python-dictionary-1.1.0.tar.gz
From https://archive.softwareheritage.org/api/1/content/sha256:6251d398cb4a59469d39b19bb2bb05f8f52ca420782abf9a9b2e7b0d0e1e090b/raw/...
download failed "https://archive.softwareheritage.org/api/1/content/sha256:6251d398cb4a59469d39b19bb2bb05f8f52ca420782abf9a9b2e7b0d0e1e090b/raw/" 404 "Not Found"
Trying to use Disarchive to assemble /gnu/store/6dr8w3b1lgh3n7p16sfl98p8jxd9x6rd-plover-python-dictionary-1.1.0.tar.gz...
download failed "https://disarchive.ngyro.com/sha256/6251d398cb4a59469d39b19bb2bb05f8f52ca420782abf9a9b2e7b0d0e1e090b" 404 "Not Found"
could not find its Disarchive specification
failed to download "/gnu/store/6dr8w3b1lgh3n7p16sfl98p8jxd9x6rd-plover-python-dictionary-1.1.0.tar.gz" from "https://files.pythonhosted.org/packages/source/p/plover-python-dictionary/plover-python-dictionary-1.1.0.tar.gz"
builder for `/gnu/store/shvfsw07pyh4kf23i2wy5ja55b31sy75-plover-python-dictionary-1.1.0.tar.gz.drv' failed to produce output path `/gnu/store/6dr8w3b1lgh3n7p16sfl98p8jxd9x6rd-plover-python-dictionary-1.1.0.tar.gz'
build of /gnu/store/shvfsw07pyh4kf23i2wy5ja55b31sy75-plover-python-dictionary-1.1.0.tar.gz.drv failed
View build log at '/var/log/guix/drvs/sh/vfsw07pyh4kf23i2wy5ja55b31sy75-plover-python-dictionary-1.1.0.tar.gz.drv.bz2'.
cannot build derivation `/gnu/store/hg96jp1xli47i80si5gkdy2h4cnlrip7-python-plover-python-dictionary-1.1.0.drv': 1 dependencies couldn't be built
guix build: error: build of `/gnu/store/hg96jp1xli47i80si5gkdy2h4cnlrip7-python-plover-python-dictionary-1.1.0.drv' failed

This error is different from the others. Guix builds packages from source. Which source to use is specified by the source field. Here, Guix tries to download the source for "plover-python-dictionary" but fails. Why it fails is infuriatingly simple: the package is stored on PyPI using underscores instead of hyphens.

(define-public python-plover-python-dictionary
  (package
    (name "python-plover-python-dictionary")
    (version "1.1.0")
    (source
      (origin
        (method url-fetch)
(uri (pypi-uri "plover-python-dictionary" version))
(uri (pypi-uri "plover_python_dictionary" version))
(sha256 (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2")))) (build-system python-build-system) (propagated-inputs `(("python-plover" ,plover))) (native-inputs `(("python-plover" ,plover) ("python-pytest" ,python-pytest))) (home-page "https://github.com/benoit-pierre/plover_python_dictionary") (synopsis "Python dictionaries support for Plover") (description "Python dictionaries support for Plover") (license #f)))

Make the replacement and build again.

guix build -f plover-python-dictionary.scm

substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 100.0%
The following derivation will be built:
   /gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv
building /gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv...
starting phase `set-SOURCE-DATE-EPOCH'
phase `set-SOURCE-DATE-EPOCH' succeeded after 0.0 seconds
starting phase `set-paths'
environment variable `PATH' set to `/gnu/store/f8s95qc6dfhl0r45m70hczw5zip0xjxq-python-wrapper-3.8.2/bin:/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/bin:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/bin:/gnu/store/v6f44zccwh9z5zk3pjlywjybbi8n2hjh-tar-1.32/bin:/gnu/store/ncydgq2znms5n1d2k5yqshhf58nsixwv-gzip-1.10/bin:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/bin:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/bin:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/bin:/gnu/store/n4n560pfvvw50a9369axw5vj5rrqfj1n-diffutils-3.7/bin:/gnu/store/cd5qf3kcnlq35p9k392pjdpdzpsnds70-patch-2.7.6/bin:/gnu/store/hic7snhayfl7m6cpfqqr73nmm19bpqkg-findutils-4.7.0/bin:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/bin:/gnu/store/ishk7fswcs4gkwcp8mh788z4mvvl9bxh-sed-4.8/bin:/gnu/store/bhs4rj58v8j1narb2454raan2ps38xd8-grep-3.4/bin:/gnu/store/57xj5gcy1jbl9ai2lnrqnpr0dald9i65-coreutils-8.32/bin:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/bin:/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin:/gnu/store/mpa04aq8lblbcviyxywxcsb1zbi0mf39-ld-wrapper-0/bin:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/bin:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/sbin:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin'
environment variable `PYTHONPATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib/python3.8/site-packages:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib/python3.8/site-packages:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib/python3.8/site-packages:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib/python3.8/site-packages:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib/python3.8/site-packages:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib/python3.8/site-packages:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib/python3.8/site-packages:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib/python3.8/site-packages:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib/python3.8/site-packages:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib/python3.8/site-packages:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib/python3.8/site-packages'
environment variable `BASH_LOADABLES_PATH' unset
environment variable `C_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `CPLUS_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include/c++:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `LIBRARY_PATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/lib:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/lib:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/lib:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/lib:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/lib:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib:/gnu/store/s3dcqzwqaakv1yx37by9chksdbkgih17-glibc-2.31-static/lib:/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib'
environment variable `GUIX_LOCPATH' set to `/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib/locale'
phase `set-paths' succeeded after 0.0 seconds
starting phase `install-locale'
using 'en_US.utf8' locale for category "LC_ALL"
phase `install-locale' succeeded after 0.0 seconds
starting phase `unpack'
plover_python_dictionary-1.1.0/
plover_python_dictionary-1.1.0/MANIFEST.in
plover_python_dictionary-1.1.0/PKG-INFO
plover_python_dictionary-1.1.0/README.md
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/PKG-INFO
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/SOURCES.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/dependency_links.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/entry_points.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/requires.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/top_level.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/zip-safe
plover_python_dictionary-1.1.0/plover_python_dictionary.py
plover_python_dictionary-1.1.0/pyproject.toml
plover_python_dictionary-1.1.0/setup.cfg
plover_python_dictionary-1.1.0/setup.py
plover_python_dictionary-1.1.0/test/
plover_python_dictionary-1.1.0/test/conftest.py
plover_python_dictionary-1.1.0/test/dict_callable_checks.py
plover_python_dictionary-1.1.0/test/dict_reverse_lookup.py
plover_python_dictionary-1.1.0/test/dict_show_stroke.py
plover_python_dictionary-1.1.0/test/dict_utf8.py
plover_python_dictionary-1.1.0/test/test_python_dict.py
plover_python_dictionary-1.1.0/tox.ini
phase `unpack' succeeded after 0.0 seconds
starting phase `ensure-no-mtimes-pre-1980'
phase `ensure-no-mtimes-pre-1980' succeeded after 0.0 seconds
starting phase `enable-bytecode-determinism'
phase `enable-bytecode-determinism' succeeded after 0.0 seconds
starting phase `patch-usr-bin-file'
phase `patch-usr-bin-file' succeeded after 0.0 seconds
starting phase `patch-source-shebangs'
patch-shebang: ./setup.py: changing `/usr/bin/env python3' to `/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin/python3'
phase `patch-source-shebangs' succeeded after 0.0 seconds
starting phase `patch-generated-file-shebangs'
phase `patch-generated-file-shebangs' succeeded after 0.0 seconds
starting phase `build'
running "python setup.py" with command "build" and parameters ()
running build
running build_py
creating build
creating build/lib
build/lib
phase `build' succeeded after 0.3 seconds
starting phase `install'
running "python setup.py" with command "install" and parameters ("--prefix=/gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0" "--single-version-externally-managed" "--root=/")
running install
running build
running build_py
running install_lib
creating /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0
creating /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib
creating /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8
creating /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
/gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
byte-compiling /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary.py to plover_python_dictionary.cpython-38.pyc
running install_egg_info
running egg_info
writing plover_python_dictionary.egg-info/PKG-INFO
writing dependency_links to plover_python_dictionary.egg-info/dependency_links.txt
writing entry points to plover_python_dictionary.egg-info/entry_points.txt
writing requirements to plover_python_dictionary.egg-info/requires.txt
writing top-level names to plover_python_dictionary.egg-info/top_level.txt
reading manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
Copying plover_python_dictionary.egg-info to /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary-1.1.0-py3.8.egg-info
running install_scripts
phase `install' succeeded after 0.3 seconds
starting phase `wrap'
find-files: /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/bin: No such file or directory
find-files: /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/sbin: No such file or directory
phase `wrap' succeeded after 0.0 seconds
starting phase `check'
running "python setup.py" with command "test" and parameters ()
running test
=0.16
Reading https://pypi.org/simple/python-xlib/
Download error on https://pypi.org/simple/python-xlib/: [Errno -2] Name or service not known -- Some packages may not be found!
Couldn't find index page for 'python-xlib' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.org/simple/
Download error on https://pypi.org/simple/: [Errno -2] Name or service not known -- Some packages may not be found!
=0.16
=0.16')
command "python" "-c" "import setuptools,
 tokenize;__file__='setup.py';f=getattr(tokenize,
 'open',
 open)(__file__);code=f.read().replace('\\r\\n',
 '\\n');f.close();exec(compile(code,
 __file__,
 'exec'))" "test" failed with status 1
builder for `/gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv' failed with exit code 1
build of /gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv failed
View build log at '/var/log/guix/drvs/1j/iv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv.bz2'.
guix build: error: build of `/gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv' failed

It looks to be failing on python-xlib. This turns out to be in the python-xyz.scm\/=python-xyz= module.

(use-modules
 (guix packages)
 (guix download)
 (gnu packages python)
 (guix build-system python)
 ((guix licenses) #:prefix license:)
 (gnu packages stenography)
 (gnu packages check)
(gnu packages python-xyz))

Add the module and build again.

guix build -f plover-python-dictionary.scm
The following derivation will be built:
   /gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv
building /gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv...
starting phase `set-SOURCE-DATE-EPOCH'
phase `set-SOURCE-DATE-EPOCH' succeeded after 0.0 seconds
starting phase `set-paths'
environment variable `PATH' set to `/gnu/store/f8s95qc6dfhl0r45m70hczw5zip0xjxq-python-wrapper-3.8.2/bin:/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/bin:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/bin:/gnu/store/v6f44zccwh9z5zk3pjlywjybbi8n2hjh-tar-1.32/bin:/gnu/store/ncydgq2znms5n1d2k5yqshhf58nsixwv-gzip-1.10/bin:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/bin:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/bin:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/bin:/gnu/store/n4n560pfvvw50a9369axw5vj5rrqfj1n-diffutils-3.7/bin:/gnu/store/cd5qf3kcnlq35p9k392pjdpdzpsnds70-patch-2.7.6/bin:/gnu/store/hic7snhayfl7m6cpfqqr73nmm19bpqkg-findutils-4.7.0/bin:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/bin:/gnu/store/ishk7fswcs4gkwcp8mh788z4mvvl9bxh-sed-4.8/bin:/gnu/store/bhs4rj58v8j1narb2454raan2ps38xd8-grep-3.4/bin:/gnu/store/57xj5gcy1jbl9ai2lnrqnpr0dald9i65-coreutils-8.32/bin:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/bin:/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin:/gnu/store/mpa04aq8lblbcviyxywxcsb1zbi0mf39-ld-wrapper-0/bin:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/bin:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/sbin:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin'
environment variable `PYTHONPATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib/python3.8/site-packages:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib/python3.8/site-packages:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib/python3.8/site-packages:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib/python3.8/site-packages:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib/python3.8/site-packages:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib/python3.8/site-packages:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib/python3.8/site-packages:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib/python3.8/site-packages:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib/python3.8/site-packages:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib/python3.8/site-packages:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib/python3.8/site-packages'
environment variable `BASH_LOADABLES_PATH' unset
environment variable `C_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `CPLUS_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include/c++:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `LIBRARY_PATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/lib:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/lib:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/lib:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/lib:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/lib:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib:/gnu/store/s3dcqzwqaakv1yx37by9chksdbkgih17-glibc-2.31-static/lib:/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib'
environment variable `GUIX_LOCPATH' set to `/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib/locale'
phase `set-paths' succeeded after 0.0 seconds
starting phase `install-locale'
using 'en_US.utf8' locale for category "LC_ALL"
phase `install-locale' succeeded after 0.0 seconds
starting phase `unpack'
plover_python_dictionary-1.1.0/
plover_python_dictionary-1.1.0/MANIFEST.in
plover_python_dictionary-1.1.0/PKG-INFO
plover_python_dictionary-1.1.0/README.md
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/PKG-INFO
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/SOURCES.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/dependency_links.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/entry_points.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/requires.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/top_level.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/zip-safe
plover_python_dictionary-1.1.0/plover_python_dictionary.py
plover_python_dictionary-1.1.0/pyproject.toml
plover_python_dictionary-1.1.0/setup.cfg
plover_python_dictionary-1.1.0/setup.py
plover_python_dictionary-1.1.0/test/
plover_python_dictionary-1.1.0/test/conftest.py
plover_python_dictionary-1.1.0/test/dict_callable_checks.py
plover_python_dictionary-1.1.0/test/dict_reverse_lookup.py
plover_python_dictionary-1.1.0/test/dict_show_stroke.py
plover_python_dictionary-1.1.0/test/dict_utf8.py
plover_python_dictionary-1.1.0/test/test_python_dict.py
plover_python_dictionary-1.1.0/tox.ini
phase `unpack' succeeded after 0.0 seconds
starting phase `ensure-no-mtimes-pre-1980'
phase `ensure-no-mtimes-pre-1980' succeeded after 0.0 seconds
starting phase `enable-bytecode-determinism'
phase `enable-bytecode-determinism' succeeded after 0.0 seconds
starting phase `patch-usr-bin-file'
phase `patch-usr-bin-file' succeeded after 0.0 seconds
starting phase `patch-source-shebangs'
patch-shebang: ./setup.py: changing `/usr/bin/env python3' to `/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin/python3'
phase `patch-source-shebangs' succeeded after 0.0 seconds
starting phase `patch-generated-file-shebangs'
phase `patch-generated-file-shebangs' succeeded after 0.0 seconds
starting phase `build'
running "python setup.py" with command "build" and parameters ()
running build
running build_py
creating build
creating build/lib
build/lib
phase `build' succeeded after 0.2 seconds
starting phase `install'
running "python setup.py" with command "install" and parameters ("--prefix=/gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0" "--single-version-externally-managed" "--root=/")
running install
running build
running build_py
running install_lib
creating /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0
creating /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib
creating /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8
creating /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
/gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
byte-compiling /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary.py to plover_python_dictionary.cpython-38.pyc
running install_egg_info
running egg_info
writing plover_python_dictionary.egg-info/PKG-INFO
writing dependency_links to plover_python_dictionary.egg-info/dependency_links.txt
writing entry points to plover_python_dictionary.egg-info/entry_points.txt
writing requirements to plover_python_dictionary.egg-info/requires.txt
writing top-level names to plover_python_dictionary.egg-info/top_level.txt
reading manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
Copying plover_python_dictionary.egg-info to /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary-1.1.0-py3.8.egg-info
running install_scripts
phase `install' succeeded after 0.2 seconds
starting phase `wrap'
find-files: /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/bin: No such file or directory
find-files: /gnu/store/ia7g764hc7wlfghqs568vx589vypr3si-python-plover-python-dictionary-1.1.0/sbin: No such file or directory
phase `wrap' succeeded after 0.0 seconds
starting phase `check'
running "python setup.py" with command "test" and parameters ()
running test
=0.16
Reading https://pypi.org/simple/python-xlib/
Download error on https://pypi.org/simple/python-xlib/: [Errno -2] Name or service not known -- Some packages may not be found!
Couldn't find index page for 'python-xlib' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.org/simple/
Download error on https://pypi.org/simple/: [Errno -2] Name or service not known -- Some packages may not be found!
=0.16
=0.16')
command "python" "-c" "import setuptools,
 tokenize;__file__='setup.py';f=getattr(tokenize,
 'open',
 open)(__file__);code=f.read().replace('\\r\\n',
 '\\n');f.close();exec(compile(code,
 __file__,
 'exec'))" "test" failed with status 1
builder for `/gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv' failed with exit code 1
build of /gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv failed
View build log at '/var/log/guix/drvs/1j/iv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv.bz2'.
guix build: error: build of `/gnu/store/1jiv4jwv9lrcm6ccv5kjc2abyrwd2rfs-python-plover-python-dictionary-1.1.0.drv' failed

Whoops! Adding the python-xyz module which contains python-xlib isn't enough. The python-xlib package also needs to be added to the build process. Recall that the input field indicates that the dependencies listed are built for the target architecture during cross-compilation. The error demonstrates that the build process fails because it lacks the python-xlib package. So, add it as an input

(define-public python-plover-python-dictionary
  (package
    (name "python-plover-python-dictionary")
    (version "1.1.0")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "plover_python_dictionary" version))
        (sha256
          (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2"))))
    (build-system python-build-system)
(inputs `(("python-xlib" ,python-xlib)))
(propagated-inputs (propagated-inputs `(("python-plover" ,plover))) (native-inputs `(("python-plover" ,plover) ("python-pytest" ,python-pytest))) (home-page "https://github.com/benoit-pierre/plover_python_dictionary") (synopsis "Python dictionaries support for Plover") (description "Python dictionaries support for Plover") (license #f)))

…and build again.

guix build -f plover-python-dictionary.scm
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 100.0%
The following derivation will be built:
   /gnu/store/68w1ms1zvs2grni70xgq9djjis0i9yva-python-plover-python-dictionary-1.1.0.drv
building /gnu/store/68w1ms1zvs2grni70xgq9djjis0i9yva-python-plover-python-dictionary-1.1.0.drv...
starting phase `set-SOURCE-DATE-EPOCH'
phase `set-SOURCE-DATE-EPOCH' succeeded after 0.0 seconds
starting phase `set-paths'
environment variable `PATH' set to `/gnu/store/f8s95qc6dfhl0r45m70hczw5zip0xjxq-python-wrapper-3.8.2/bin:/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/bin:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/bin:/gnu/store/v6f44zccwh9z5zk3pjlywjybbi8n2hjh-tar-1.32/bin:/gnu/store/ncydgq2znms5n1d2k5yqshhf58nsixwv-gzip-1.10/bin:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/bin:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/bin:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/bin:/gnu/store/n4n560pfvvw50a9369axw5vj5rrqfj1n-diffutils-3.7/bin:/gnu/store/cd5qf3kcnlq35p9k392pjdpdzpsnds70-patch-2.7.6/bin:/gnu/store/hic7snhayfl7m6cpfqqr73nmm19bpqkg-findutils-4.7.0/bin:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/bin:/gnu/store/ishk7fswcs4gkwcp8mh788z4mvvl9bxh-sed-4.8/bin:/gnu/store/bhs4rj58v8j1narb2454raan2ps38xd8-grep-3.4/bin:/gnu/store/57xj5gcy1jbl9ai2lnrqnpr0dald9i65-coreutils-8.32/bin:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/bin:/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin:/gnu/store/mpa04aq8lblbcviyxywxcsb1zbi0mf39-ld-wrapper-0/bin:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/bin:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/sbin:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin'
environment variable `PYTHONPATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib/python3.8/site-packages:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib/python3.8/site-packages:/gnu/store/rhy576kcv5dhfdyrpibhrzqg36rsrbwc-python-xlib-0.29/lib/python3.8/site-packages:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib/python3.8/site-packages:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib/python3.8/site-packages:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib/python3.8/site-packages:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib/python3.8/site-packages:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib/python3.8/site-packages:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib/python3.8/site-packages:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib/python3.8/site-packages:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib/python3.8/site-packages:/gnu/store/hjmz8ymac939ribn7g3jkgms4dk2az3a-python-six-1.14.0/lib/python3.8/site-packages:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib/python3.8/site-packages'
environment variable `BASH_LOADABLES_PATH' unset
environment variable `C_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `CPLUS_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include/c++:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `LIBRARY_PATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib:/gnu/store/rhy576kcv5dhfdyrpibhrzqg36rsrbwc-python-xlib-0.29/lib:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/lib:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/lib:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/lib:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/lib:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/lib:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib:/gnu/store/s3dcqzwqaakv1yx37by9chksdbkgih17-glibc-2.31-static/lib:/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib:/gnu/store/hjmz8ymac939ribn7g3jkgms4dk2az3a-python-six-1.14.0/lib:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib'
environment variable `GUIX_LOCPATH' set to `/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib/locale'
phase `set-paths' succeeded after 0.0 seconds
starting phase `install-locale'
using 'en_US.utf8' locale for category "LC_ALL"
phase `install-locale' succeeded after 0.0 seconds
starting phase `unpack'
plover_python_dictionary-1.1.0/
plover_python_dictionary-1.1.0/MANIFEST.in
plover_python_dictionary-1.1.0/PKG-INFO
plover_python_dictionary-1.1.0/README.md
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/PKG-INFO
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/SOURCES.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/dependency_links.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/entry_points.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/requires.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/top_level.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/zip-safe
plover_python_dictionary-1.1.0/plover_python_dictionary.py
plover_python_dictionary-1.1.0/pyproject.toml
plover_python_dictionary-1.1.0/setup.cfg
plover_python_dictionary-1.1.0/setup.py
plover_python_dictionary-1.1.0/test/
plover_python_dictionary-1.1.0/test/conftest.py
plover_python_dictionary-1.1.0/test/dict_callable_checks.py
plover_python_dictionary-1.1.0/test/dict_reverse_lookup.py
plover_python_dictionary-1.1.0/test/dict_show_stroke.py
plover_python_dictionary-1.1.0/test/dict_utf8.py
plover_python_dictionary-1.1.0/test/test_python_dict.py
plover_python_dictionary-1.1.0/tox.ini
phase `unpack' succeeded after 0.0 seconds
starting phase `ensure-no-mtimes-pre-1980'
phase `ensure-no-mtimes-pre-1980' succeeded after 0.0 seconds
starting phase `enable-bytecode-determinism'
phase `enable-bytecode-determinism' succeeded after 0.0 seconds
starting phase `patch-usr-bin-file'
phase `patch-usr-bin-file' succeeded after 0.0 seconds
starting phase `patch-source-shebangs'
patch-shebang: ./setup.py: changing `/usr/bin/env python3' to `/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin/python3'
phase `patch-source-shebangs' succeeded after 0.0 seconds
starting phase `patch-generated-file-shebangs'
phase `patch-generated-file-shebangs' succeeded after 0.0 seconds
starting phase `build'
running "python setup.py" with command "build" and parameters ()
running build
running build_py
creating build
creating build/lib
build/lib
phase `build' succeeded after 0.2 seconds
starting phase `install'
running "python setup.py" with command "install" and parameters ("--prefix=/gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0" "--single-version-externally-managed" "--root=/")
running install
running build
running build_py
running install_lib
creating /gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0
creating /gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0/lib
creating /gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0/lib/python3.8
creating /gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
/gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
byte-compiling /gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary.py to plover_python_dictionary.cpython-38.pyc
running install_egg_info
running egg_info
writing plover_python_dictionary.egg-info/PKG-INFO
writing dependency_links to plover_python_dictionary.egg-info/dependency_links.txt
writing entry points to plover_python_dictionary.egg-info/entry_points.txt
writing requirements to plover_python_dictionary.egg-info/requires.txt
writing top-level names to plover_python_dictionary.egg-info/top_level.txt
reading manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
Copying plover_python_dictionary.egg-info to /gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary-1.1.0-py3.8.egg-info
running install_scripts
phase `install' succeeded after 0.2 seconds
starting phase `wrap'
find-files: /gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0/bin: No such file or directory
find-files: /gnu/store/13kysqq3p7chry6yv9lhwiks2rh1sa7c-python-plover-python-dictionary-1.1.0/sbin: No such file or directory
phase `wrap' succeeded after 0.0 seconds
starting phase `check'
running "python setup.py" with command "test" and parameters ()
running test
=2.7
Reading https://pypi.org/simple/pyserial/
Download error on https://pypi.org/simple/pyserial/: [Errno -2] Name or service not known -- Some packages may not be found!
Couldn't find index page for 'pyserial' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.org/simple/
Download error on https://pypi.org/simple/: [Errno -2] Name or service not known -- Some packages may not be found!
=2.7
=2.7')
command "python" "-c" "import setuptools,
 tokenize;__file__='setup.py';f=getattr(tokenize,
 'open',
 open)(__file__);code=f.read().replace('\\r\\n',
 '\\n');f.close();exec(compile(code,
 __file__,
 'exec'))" "test" failed with status 1
builder for `/gnu/store/68w1ms1zvs2grni70xgq9djjis0i9yva-python-plover-python-dictionary-1.1.0.drv' failed with exit code 1
build of /gnu/store/68w1ms1zvs2grni70xgq9djjis0i9yva-python-plover-python-dictionary-1.1.0.drv failed
View build log at '/var/log/guix/drvs/68/w1ms1zvs2grni70xgq9djjis0i9yva-python-plover-python-dictionary-1.1.0.drv.bz2'.
guix build: error: build of `/gnu/store/68w1ms1zvs2grni70xgq9djjis0i9yva-python-plover-python-dictionary-1.1.0.drv' failed

This time the problem is similar. The build process can't find pyserial. It looks like pyserial is also in python-xyz.scm. Since that was added in the last change, that means pyserial needs to be added to inputs. Looking at the package definition, the package is called "python-pyserial" within Guix.

(define-public python-plover-python-dictionary
  (package
    (name "python-plover-python-dictionary")
    (version "1.1.0")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "plover_python_dictionary" version))
        (sha256
          (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2"))))
    (build-system python-build-system)
(inputs `(("python-xlib" ,python-xlib)))
(inputs
`(("python-xlib" ,python-xlib)
("python-pyserial" ,python-pyserial)))
(propagated-inputs `(("python-plover" ,plover))) (native-inputs `(("python-plover" ,plover) ("python-pytest" ,python-pytest))) (home-page "https://github.com/benoit-pierre/plover_python_dictionary") (synopsis "Python dictionaries support for Plover") (description "Python dictionaries support for Plover") (license #f)))

After adding the needed input, try to build again.

guix build -f plover-python-dictionary.scm
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 100.0%
The following derivation will be built:
   /gnu/store/fl4m0dhnvflmnws9kmwqm570lxyx37qq-python-plover-python-dictionary-1.1.0.drv
building /gnu/store/fl4m0dhnvflmnws9kmwqm570lxyx37qq-python-plover-python-dictionary-1.1.0.drv...
starting phase `set-SOURCE-DATE-EPOCH'
phase `set-SOURCE-DATE-EPOCH' succeeded after 0.0 seconds
starting phase `set-paths'
environment variable `PATH' set to `/gnu/store/f8s95qc6dfhl0r45m70hczw5zip0xjxq-python-wrapper-3.8.2/bin:/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/bin:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/bin:/gnu/store/ci0f79qsippv8rqcjfgfxyds28iy4nc3-python-pyserial-3.5/bin:/gnu/store/v6f44zccwh9z5zk3pjlywjybbi8n2hjh-tar-1.32/bin:/gnu/store/ncydgq2znms5n1d2k5yqshhf58nsixwv-gzip-1.10/bin:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/bin:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/bin:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/bin:/gnu/store/n4n560pfvvw50a9369axw5vj5rrqfj1n-diffutils-3.7/bin:/gnu/store/cd5qf3kcnlq35p9k392pjdpdzpsnds70-patch-2.7.6/bin:/gnu/store/hic7snhayfl7m6cpfqqr73nmm19bpqkg-findutils-4.7.0/bin:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/bin:/gnu/store/ishk7fswcs4gkwcp8mh788z4mvvl9bxh-sed-4.8/bin:/gnu/store/bhs4rj58v8j1narb2454raan2ps38xd8-grep-3.4/bin:/gnu/store/57xj5gcy1jbl9ai2lnrqnpr0dald9i65-coreutils-8.32/bin:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/bin:/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin:/gnu/store/mpa04aq8lblbcviyxywxcsb1zbi0mf39-ld-wrapper-0/bin:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/bin:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/sbin:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin'
environment variable `PYTHONPATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib/python3.8/site-packages:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib/python3.8/site-packages:/gnu/store/rhy576kcv5dhfdyrpibhrzqg36rsrbwc-python-xlib-0.29/lib/python3.8/site-packages:/gnu/store/ci0f79qsippv8rqcjfgfxyds28iy4nc3-python-pyserial-3.5/lib/python3.8/site-packages:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib/python3.8/site-packages:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib/python3.8/site-packages:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib/python3.8/site-packages:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib/python3.8/site-packages:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib/python3.8/site-packages:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib/python3.8/site-packages:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib/python3.8/site-packages:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib/python3.8/site-packages:/gnu/store/hjmz8ymac939ribn7g3jkgms4dk2az3a-python-six-1.14.0/lib/python3.8/site-packages:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib/python3.8/site-packages'
environment variable `BASH_LOADABLES_PATH' unset
environment variable `C_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `CPLUS_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include/c++:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `LIBRARY_PATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib:/gnu/store/rhy576kcv5dhfdyrpibhrzqg36rsrbwc-python-xlib-0.29/lib:/gnu/store/ci0f79qsippv8rqcjfgfxyds28iy4nc3-python-pyserial-3.5/lib:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/lib:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/lib:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/lib:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/lib:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/lib:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib:/gnu/store/s3dcqzwqaakv1yx37by9chksdbkgih17-glibc-2.31-static/lib:/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib:/gnu/store/hjmz8ymac939ribn7g3jkgms4dk2az3a-python-six-1.14.0/lib:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib'
environment variable `GUIX_LOCPATH' set to `/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib/locale'
phase `set-paths' succeeded after 0.0 seconds
starting phase `install-locale'
using 'en_US.utf8' locale for category "LC_ALL"
phase `install-locale' succeeded after 0.0 seconds
starting phase `unpack'
plover_python_dictionary-1.1.0/
plover_python_dictionary-1.1.0/MANIFEST.in
plover_python_dictionary-1.1.0/PKG-INFO
plover_python_dictionary-1.1.0/README.md
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/PKG-INFO
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/SOURCES.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/dependency_links.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/entry_points.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/requires.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/top_level.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/zip-safe
plover_python_dictionary-1.1.0/plover_python_dictionary.py
plover_python_dictionary-1.1.0/pyproject.toml
plover_python_dictionary-1.1.0/setup.cfg
plover_python_dictionary-1.1.0/setup.py
plover_python_dictionary-1.1.0/test/
plover_python_dictionary-1.1.0/test/conftest.py
plover_python_dictionary-1.1.0/test/dict_callable_checks.py
plover_python_dictionary-1.1.0/test/dict_reverse_lookup.py
plover_python_dictionary-1.1.0/test/dict_show_stroke.py
plover_python_dictionary-1.1.0/test/dict_utf8.py
plover_python_dictionary-1.1.0/test/test_python_dict.py
plover_python_dictionary-1.1.0/tox.ini
phase `unpack' succeeded after 0.0 seconds
starting phase `ensure-no-mtimes-pre-1980'
phase `ensure-no-mtimes-pre-1980' succeeded after 0.0 seconds
starting phase `enable-bytecode-determinism'
phase `enable-bytecode-determinism' succeeded after 0.0 seconds
starting phase `patch-usr-bin-file'
phase `patch-usr-bin-file' succeeded after 0.0 seconds
starting phase `patch-source-shebangs'
patch-shebang: ./setup.py: changing `/usr/bin/env python3' to `/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin/python3'
phase `patch-source-shebangs' succeeded after 0.0 seconds
starting phase `patch-generated-file-shebangs'
phase `patch-generated-file-shebangs' succeeded after 0.0 seconds
starting phase `build'
running "python setup.py" with command "build" and parameters ()
running build
running build_py
creating build
creating build/lib
build/lib
phase `build' succeeded after 0.2 seconds
starting phase `install'
running "python setup.py" with command "install" and parameters ("--prefix=/gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0" "--single-version-externally-managed" "--root=/")
running install
running build
running build_py
running install_lib
creating /gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0
creating /gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0/lib
creating /gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0/lib/python3.8
creating /gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
/gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
byte-compiling /gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary.py to plover_python_dictionary.cpython-38.pyc
running install_egg_info
running egg_info
writing plover_python_dictionary.egg-info/PKG-INFO
writing dependency_links to plover_python_dictionary.egg-info/dependency_links.txt
writing entry points to plover_python_dictionary.egg-info/entry_points.txt
writing requirements to plover_python_dictionary.egg-info/requires.txt
writing top-level names to plover_python_dictionary.egg-info/top_level.txt
reading manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
Copying plover_python_dictionary.egg-info to /gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary-1.1.0-py3.8.egg-info
running install_scripts
phase `install' succeeded after 0.2 seconds
starting phase `wrap'
find-files: /gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0/bin: No such file or directory
find-files: /gnu/store/lfkbfwc9w1hby1l19ylng5y10pcmvxw7-python-plover-python-dictionary-1.1.0/sbin: No such file or directory
phase `wrap' succeeded after 0.0 seconds
starting phase `check'
running "python setup.py" with command "test" and parameters ()
running test
=1.3.0
Reading https://pypi.org/simple/appdirs/
Download error on https://pypi.org/simple/appdirs/: [Errno -2] Name or service not known -- Some packages may not be found!
Couldn't find index page for 'appdirs' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.org/simple/
Download error on https://pypi.org/simple/: [Errno -2] Name or service not known -- Some packages may not be found!
=1.3.0
=1.3.0')
command "python" "-c" "import setuptools,
 tokenize;__file__='setup.py';f=getattr(tokenize,
 'open',
 open)(__file__);code=f.read().replace('\\r\\n',
 '\\n');f.close();exec(compile(code,
 __file__,
 'exec'))" "test" failed with status 1
builder for `/gnu/store/fl4m0dhnvflmnws9kmwqm570lxyx37qq-python-plover-python-dictionary-1.1.0.drv' failed with exit code 1
build of /gnu/store/fl4m0dhnvflmnws9kmwqm570lxyx37qq-python-plover-python-dictionary-1.1.0.drv failed
View build log at '/var/log/guix/drvs/fl/4m0dhnvflmnws9kmwqm570lxyx37qq-python-plover-python-dictionary-1.1.0.drv.bz2'.
guix build: error: build of `/gnu/store/fl4m0dhnvflmnws9kmwqm570lxyx37qq-python-plover-python-dictionary-1.1.0.drv' failed

The next error is another missing Python package. This time it's the appdirs package. It too is in the python-xyz module. So, just add it to the inputs field.

(define-public python-plover-python-dictionary
  (package
    (name "python-plover-python-dictionary")
    (version "1.1.0")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "plover_python_dictionary" version))
        (sha256
          (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2"))))
    (build-system python-build-system)
    (inputs
     `(("python-xlib" ,python-xlib)
("python-pyserial" ,python-pyserial)))
("python-pyserial" ,python-pyserial)
("python-appdirs" ,python-appdirs)))
(propagated-inputs `(("python-plover" ,plover))) (native-inputs `(("python-plover" ,plover) ("python-pytest" ,python-pytest))) (home-page "https://github.com/benoit-pierre/plover_python_dictionary") (synopsis "Python dictionaries support for Plover") (description "Python dictionaries support for Plover") (license #f)))

And build again.

guix build -f plover-python-dictionary.scm
The following derivation will be built:
   /gnu/store/bia4xsxfrr9ibgpxy03ixpwyayg16hfq-python-plover-python-dictionary-1.1.0.drv
building /gnu/store/bia4xsxfrr9ibgpxy03ixpwyayg16hfq-python-plover-python-dictionary-1.1.0.drv...
starting phase `set-SOURCE-DATE-EPOCH'
phase `set-SOURCE-DATE-EPOCH' succeeded after 0.0 seconds
starting phase `set-paths'
environment variable `PATH' set to `/gnu/store/f8s95qc6dfhl0r45m70hczw5zip0xjxq-python-wrapper-3.8.2/bin:/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/bin:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/bin:/gnu/store/ci0f79qsippv8rqcjfgfxyds28iy4nc3-python-pyserial-3.5/bin:/gnu/store/v6f44zccwh9z5zk3pjlywjybbi8n2hjh-tar-1.32/bin:/gnu/store/ncydgq2znms5n1d2k5yqshhf58nsixwv-gzip-1.10/bin:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/bin:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/bin:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/bin:/gnu/store/n4n560pfvvw50a9369axw5vj5rrqfj1n-diffutils-3.7/bin:/gnu/store/cd5qf3kcnlq35p9k392pjdpdzpsnds70-patch-2.7.6/bin:/gnu/store/hic7snhayfl7m6cpfqqr73nmm19bpqkg-findutils-4.7.0/bin:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/bin:/gnu/store/ishk7fswcs4gkwcp8mh788z4mvvl9bxh-sed-4.8/bin:/gnu/store/bhs4rj58v8j1narb2454raan2ps38xd8-grep-3.4/bin:/gnu/store/57xj5gcy1jbl9ai2lnrqnpr0dald9i65-coreutils-8.32/bin:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/bin:/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin:/gnu/store/mpa04aq8lblbcviyxywxcsb1zbi0mf39-ld-wrapper-0/bin:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/bin:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/bin:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/sbin:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin'
environment variable `PYTHONPATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib/python3.8/site-packages:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib/python3.8/site-packages:/gnu/store/rhy576kcv5dhfdyrpibhrzqg36rsrbwc-python-xlib-0.29/lib/python3.8/site-packages:/gnu/store/ci0f79qsippv8rqcjfgfxyds28iy4nc3-python-pyserial-3.5/lib/python3.8/site-packages:/gnu/store/iw4nff8b53cf65brf5bsxx3j8pn37fk3-python-appdirs-1.4.3/lib/python3.8/site-packages:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib/python3.8/site-packages:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib/python3.8/site-packages:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib/python3.8/site-packages:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib/python3.8/site-packages:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib/python3.8/site-packages:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib/python3.8/site-packages:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib/python3.8/site-packages:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib/python3.8/site-packages:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib/python3.8/site-packages:/gnu/store/hjmz8ymac939ribn7g3jkgms4dk2az3a-python-six-1.14.0/lib/python3.8/site-packages:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib/python3.8/site-packages'
environment variable `BASH_LOADABLES_PATH' unset
environment variable `C_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `CPLUS_INCLUDE_PATH' set to `/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/include:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/include:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/include:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/include:/gnu/store/hm40bxnv8jxmbc1lpb7zfimii4xm9m81-make-4.3/include:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/include:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include/c++:/gnu/store/rn75fm7adgx3pw5j8pg3bczfqq1y17lk-gcc-7.5.0/include:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/include:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/include:/gnu/store/gfapkk5c6hvl1d94m4sqnhn7f9l5gqyh-linux-libre-headers-5.4.20/include'
environment variable `LIBRARY_PATH' set to `/gnu/store/ipk30s5pq9hdnqqvnq32ajcakwqpcxxi-plover-4.0.0.dev8/lib:/gnu/store/436410968f8mpdlsn1pw456mpgwmbh4m-python-pytest-5.3.5/lib:/gnu/store/rhy576kcv5dhfdyrpibhrzqg36rsrbwc-python-xlib-0.29/lib:/gnu/store/ci0f79qsippv8rqcjfgfxyds28iy4nc3-python-pyserial-3.5/lib:/gnu/store/iw4nff8b53cf65brf5bsxx3j8pn37fk3-python-appdirs-1.4.3/lib:/gnu/store/i8h2pcxqdq07ijm3ibkka8f4smn1w48v-bzip2-1.0.8/lib:/gnu/store/9860f1abqj8wjjnwl8a9v54pdcc3bhgf-xz-5.2.4/lib:/gnu/store/60g7r3l01fd7c58yjbm6krgcwj1jkpwg-file-5.38/lib:/gnu/store/swqdvwri9dbv6zssg6v0by7l05hd6wxp-gawk-5.0.1/lib:/gnu/store/m1z7cdbqsqyp9xnjw5cvlb4a7gkcg3m4-binutils-2.34/lib:/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib:/gnu/store/s3dcqzwqaakv1yx37by9chksdbkgih17-glibc-2.31-static/lib:/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib:/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/lib:/gnu/store/xjiplzqxr084ximm4wdhyx3wzf8nxvv0-python-wcwidth-0.1.8/lib:/gnu/store/wqw4gzwl3nh9z9kzzs46zjw5v4dlb3hy-python-six-bootstrap-1.14.0/lib:/gnu/store/avj1ma4bvfjnw86pd9ys64899b627f0x-python-py-1.8.1/lib:/gnu/store/nqi6xqx8h2fxldi3xbigkc24wfzzsy5j-python-pluggy-0.13.1/lib:/gnu/store/fnhij2sl3yx4048ij4jnx4lfikw43v78-python-packaging-bootstrap-20.0/lib:/gnu/store/bpbpmqwx2zvrw2h5k8c8fwk91xmzfym3-python-more-itertools-8.2.0/lib:/gnu/store/jjqhdlpg9bx3j0l4z52zm5xzrpscd0yk-python-attrs-bootstrap-19.3.0/lib:/gnu/store/v166fk97g9np2rb27m2kgfbnivlfxcgn-python-atomicwrites-1.3.0/lib:/gnu/store/hjmz8ymac939ribn7g3jkgms4dk2az3a-python-six-1.14.0/lib:/gnu/store/69lzz2dp87f896843jj05mw5z4hd9my2-python-pyparsing-2.4.6/lib'
environment variable `GUIX_LOCPATH' set to `/gnu/store/hwcky7446s952w0mwchhmm211ll07zrq-glibc-utf8-locales-2.31/lib/locale'
phase `set-paths' succeeded after 0.0 seconds
starting phase `install-locale'
using 'en_US.utf8' locale for category "LC_ALL"
phase `install-locale' succeeded after 0.0 seconds
starting phase `unpack'
plover_python_dictionary-1.1.0/
plover_python_dictionary-1.1.0/MANIFEST.in
plover_python_dictionary-1.1.0/PKG-INFO
plover_python_dictionary-1.1.0/README.md
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/PKG-INFO
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/SOURCES.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/dependency_links.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/entry_points.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/requires.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/top_level.txt
plover_python_dictionary-1.1.0/plover_python_dictionary.egg-info/zip-safe
plover_python_dictionary-1.1.0/plover_python_dictionary.py
plover_python_dictionary-1.1.0/pyproject.toml
plover_python_dictionary-1.1.0/setup.cfg
plover_python_dictionary-1.1.0/setup.py
plover_python_dictionary-1.1.0/test/
plover_python_dictionary-1.1.0/test/conftest.py
plover_python_dictionary-1.1.0/test/dict_callable_checks.py
plover_python_dictionary-1.1.0/test/dict_reverse_lookup.py
plover_python_dictionary-1.1.0/test/dict_show_stroke.py
plover_python_dictionary-1.1.0/test/dict_utf8.py
plover_python_dictionary-1.1.0/test/test_python_dict.py
plover_python_dictionary-1.1.0/tox.ini
phase `unpack' succeeded after 0.0 seconds
starting phase `ensure-no-mtimes-pre-1980'
phase `ensure-no-mtimes-pre-1980' succeeded after 0.0 seconds
starting phase `enable-bytecode-determinism'
phase `enable-bytecode-determinism' succeeded after 0.0 seconds
starting phase `patch-usr-bin-file'
phase `patch-usr-bin-file' succeeded after 0.0 seconds
starting phase `patch-source-shebangs'
patch-shebang: ./setup.py: changing `/usr/bin/env python3' to `/gnu/store/9w9jvy3bgjg4qaqmrij01nbppiccqr7c-python-3.8.2/bin/python3'
phase `patch-source-shebangs' succeeded after 0.0 seconds
starting phase `patch-generated-file-shebangs'
phase `patch-generated-file-shebangs' succeeded after 0.0 seconds
starting phase `build'
running "python setup.py" with command "build" and parameters ()
running build
running build_py
creating build
creating build/lib
build/lib
phase `build' succeeded after 0.2 seconds
starting phase `install'
running "python setup.py" with command "install" and parameters ("--prefix=/gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0" "--single-version-externally-managed" "--root=/")
running install
running build
running build_py
running install_lib
creating /gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0
creating /gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/lib
creating /gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/lib/python3.8
creating /gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
/gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages
byte-compiling /gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary.py to plover_python_dictionary.cpython-38.pyc
running install_egg_info
running egg_info
writing plover_python_dictionary.egg-info/PKG-INFO
writing dependency_links to plover_python_dictionary.egg-info/dependency_links.txt
writing entry points to plover_python_dictionary.egg-info/entry_points.txt
writing requirements to plover_python_dictionary.egg-info/requires.txt
writing top-level names to plover_python_dictionary.egg-info/top_level.txt
reading manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
Copying plover_python_dictionary.egg-info to /gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/lib/python3.8/site-packages/plover_python_dictionary-1.1.0-py3.8.egg-info
running install_scripts
phase `install' succeeded after 0.2 seconds
starting phase `wrap'
find-files: /gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/bin: No such file or directory
find-files: /gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/sbin: No such file or directory
phase `wrap' succeeded after 0.0 seconds
starting phase `check'
running "python setup.py" with command "test" and parameters ()
running test
running egg_info
writing plover_python_dictionary.egg-info/PKG-INFO
writing dependency_links to plover_python_dictionary.egg-info/dependency_links.txt
writing entry points to plover_python_dictionary.egg-info/entry_points.txt
writing requirements to plover_python_dictionary.egg-info/requires.txt
writing top-level names to plover_python_dictionary.egg-info/top_level.txt
reading manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'plover_python_dictionary.egg-info/SOURCES.txt'
running build_ext

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
phase `check' succeeded after 0.3 seconds
starting phase `patch-shebangs'
phase `patch-shebangs' succeeded after 0.0 seconds
starting phase `rename-pth-file'
phase `rename-pth-file' succeeded after 0.0 seconds
starting phase `strip'
stripping binaries in "/gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/lib" with "strip" and flags ("--strip-debug" "--enable-deterministic-archives")
phase `strip' succeeded after 0.0 seconds
starting phase `validate-runpath'
validating RUNPATH of 0 binaries in "/gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0/lib"...
phase `validate-runpath' succeeded after 0.0 seconds
starting phase `validate-documentation-location'
phase `validate-documentation-location' succeeded after 0.0 seconds
starting phase `delete-info-dir-file'
phase `delete-info-dir-file' succeeded after 0.0 seconds
starting phase `patch-dot-desktop-files'
phase `patch-dot-desktop-files' succeeded after 0.0 seconds
starting phase `install-license-files'
installing 0 license files from '.'
phase `install-license-files' succeeded after 0.0 seconds
starting phase `reset-gzip-timestamps'
phase `reset-gzip-timestamps' succeeded after 0.0 seconds
starting phase `compress-documentation'
phase `compress-documentation' succeeded after 0.0 seconds
successfully built /gnu/store/bia4xsxfrr9ibgpxy03ixpwyayg16hfq-python-plover-python-dictionary-1.1.0.drv
/gnu/store/vlrxy0xgrvlfpk4h29h4rg2js5nmvz8m-python-plover-python-dictionary-1.1.0

Woo-hoo! Look at that second to last line (excuse the control characters, an artifact of the writing process):

successfully built /gnu/store/bia4xsxfrr9ibgpxy03ixpwyayg16hfq-python-plover-python-dictionary-1.1.0.drv

The definition so far looks like:

(use-modules
 (guix packages)
 (guix download)
 (gnu packages python)
 (guix build-system python)
 ((guix licenses) #:prefix license:)
 (gnu packages stenography)
 (gnu packages check)
 (gnu packages python-xyz))

(define-public python-pyobjc-framework-quartz
  (package
    (name "python-pyobjc-framework-quartz")
    (version "7.3")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyobjc-framework-Quartz" version))
        (sha256
          (base32 "02ygxh0dhb5xagyvcxc3i9147kbmm0ihkxmxh3wxwqj2qd22i0cq"))))
    (build-system python-build-system)
    (propagated-inputs
      `(("python-pyobjc-core" ,python-pyobjc-core)
        ("python-pyobjc-framework-cocoa" ,python-pyobjc-framework-cocoa)))
    (home-page "https://github.com/ronaldoussoren/pyobjc")
    (synopsis "Wrappers for the Quartz frameworks on macOS")
    (description "Wrappers for the Quartz frameworks on macOS")
    (license license:expat)))

(define-public python-pyobjc-framework-cocoa
  (package
    (name "python-pyobjc-framework-cocoa")
    (version "7.3")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyobjc-framework-Cocoa" version))
        (sha256
          (base32 "0zhbp18i06aprwfbp06l9wm3qrzsdcyy9hwis5d4b8wmlzkhb3di"))))
    (build-system python-build-system)
    (propagated-inputs `(("python-pyobjc-core" ,python-pyobjc-core)))
    (home-page "https://github.com/ronaldoussoren/pyobjc")
    (synopsis "Wrappers for the Cocoa frameworks on macOS")
    (description "Wrappers for the Cocoa frameworks on macOS")
    (license license:expat)))

(define-public python-pyobjc-core
  (package
    (name "python-pyobjc-core")
    (version "7.3")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyobjc-core" version))
        (sha256
          (base32 "0x3msrzvcszlmladdpl64s48l52fwk4xlnnri8daq2mliggsx0ah"))))
    (build-system python-build-system)
    (home-page "https://github.com/ronaldoussoren/pyobjc")
    (synopsis "Python<->ObjC Interoperability Module")
    (description "Python<->ObjC Interoperability Module")
    (license license:expat)))

(define-public python-appnope
  (package
    (name "python-appnope")
    (version "0.1.2")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "appnope" version))
        (sha256
          (base32 "12i50gv145cl9qkf87av5aprq7qbcq601cvfiy1mh2a6bd5wv0yx"))))
    (build-system python-build-system)
    (home-page "http://github.com/minrk/appnope")
    (synopsis "Disable App Nap on macOS >= 10.9")
    (description "Disable App Nap on macOS >= 10.9")
    (license license:bsd-3)))

(define-public python-plover-python-dictionary
  (package
    (name "python-plover-python-dictionary")
    (version "1.1.0")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "plover_python_dictionary" version))
        (sha256
          (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2"))))
    (build-system python-build-system)
    (inputs
     `(("python-xlib" ,python-xlib)
       ("python-pyserial" ,python-pyserial)
       ("python-appdirs" ,python-appdirs)))
    (propagated-inputs `(("python-plover" ,plover)))
    (native-inputs
      `(("python-plover" ,plover) ("python-pytest" ,python-pytest)))
    (home-page "https://github.com/benoit-pierre/plover_python_dictionary")
    (synopsis "Python dictionaries support for Plover")
    (description "Python dictionaries support for Plover")
    (license #f)))

python-plover-python-dictionary

Clean things up

The python-plover-python-dictionary definition has a lot of cruft in it. There are lots of references to macOS which, especially as a Guix user, aren't needed. There's also a definition for something related to Objective-C, again a Mac thing. Let's kill those and try building again.

(define-public python-pyobjc-framework-quartz
  (package
    (name "python-pyobjc-framework-quartz")
    (version "7.3")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyobjc-framework-Quartz" version))
        (sha256
          (base32 "02ygxh0dhb5xagyvcxc3i9147kbmm0ihkxmxh3wxwqj2qd22i0cq"))))
    (build-system python-build-system)
    (propagated-inputs
      `(("python-pyobjc-core" ,python-pyobjc-core)
        ("python-pyobjc-framework-cocoa" ,python-pyobjc-framework-cocoa)))
    (home-page "https://github.com/ronaldoussoren/pyobjc")
    (synopsis "Wrappers for the Quartz frameworks on macOS")
    (description "Wrappers for the Quartz frameworks on macOS")
    (license license:expat)))

(define-public python-pyobjc-framework-cocoa
  (package
    (name "python-pyobjc-framework-cocoa")
    (version "7.3")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyobjc-framework-Cocoa" version))
        (sha256
          (base32 "0zhbp18i06aprwfbp06l9wm3qrzsdcyy9hwis5d4b8wmlzkhb3di"))))
    (build-system python-build-system)
    (propagated-inputs `(("python-pyobjc-core" ,python-pyobjc-core)))
    (home-page "https://github.com/ronaldoussoren/pyobjc")
    (synopsis "Wrappers for the Cocoa frameworks on macOS")
    (description "Wrappers for the Cocoa frameworks on macOS")
    (license license:expat)))

(define-public python-pyobjc-core
  (package
    (name "python-pyobjc-core")
    (version "7.3")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyobjc-core" version))
        (sha256
          (base32 "0x3msrzvcszlmladdpl64s48l52fwk4xlnnri8daq2mliggsx0ah"))))
    (build-system python-build-system)
    (home-page "https://github.com/ronaldoussoren/pyobjc")
    (synopsis "Python<->ObjC Interoperability Module")
    (description "Python<->ObjC Interoperability Module")
    (license license:expat)))

(define-public python-appnope
  (package
    (name "python-appnope")
    (version "0.1.2")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "appnope" version))
        (sha256
          (base32 "12i50gv145cl9qkf87av5aprq7qbcq601cvfiy1mh2a6bd5wv0yx"))))
    (build-system python-build-system)
    (home-page "http://github.com/minrk/appnope")
    (synopsis "Disable App Nap on macOS >= 10.9")
    (description "Disable App Nap on macOS >= 10.9")
    (license license:bsd-3)))

Killing all the code related to non-free systems leaves only:

(use-modules
 (guix packages)
 (guix download)
 (gnu packages python)
 (guix build-system python)
 ((guix licenses) #:prefix license:)
 (gnu packages stenography)
 (gnu packages check)
 (gnu packages python-xyz))

(define-public python-plover-python-dictionary
  (package
    (name "python-plover-python-dictionary")
    (version "1.1.0")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "plover_python_dictionary" version))
        (sha256
          (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2"))))
    (build-system python-build-system)
    (inputs
     `(("python-xlib" ,python-xlib)
       ("python-pyserial" ,python-pyserial)
       ("python-appdirs" ,python-appdirs)))
    (propagated-inputs `(("python-plover" ,plover)))
    (native-inputs
      `(("python-plover" ,plover)
        ("python-pytest" ,python-pytest)))
    (home-page "https://github.com/benoit-pierre/plover_python_dictionary")
    (synopsis "Python dictionaries support for Plover")
    (description "Python dictionaries support for Plover")
    (license #f)))

python-plover-python-dictionary

Now try building again and seeing if the Mac packages are really needed.

guix build -f plover-python-dictionary.scm
/gnu/store/j8w6f98115vri1gapc7i4h4gqa20q3mv-python-plover-python-dictionary-1.1.0

Nope, not needed.

Install the final package

Now that there's a working definition, the package can be installed.

guix package -f plover-python-dictionary.scm && guix package -I | grep plover-python-dictionary
The following package will be installed:
   python-plover-python-dictionary 1.1.0

python-plover-python-dictionary	1.1.0			out	/gnu/store/j8w6f98115vri1gapc7i4h4gqa20q3mv-python-plover-python-dictionary-1.1.0

Get the plugin to be recognized by Plover

The build was successful, yet when Plover is restarted, Python dictionaries still can't be loaded. Why?

One person advised me to add native-search-paths to the Plover definition:

"after you have that package working, you'll want to add `(native-search-paths (package-native-search-paths python))' to plover's definition so plover sees plugins"

This appeared to fix the issue but turned out to not really be needed.

(use-modules
(define-public plover
  (package
    (name "plover")
    (version "4.0.0.dev8")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/openstenoproject/plover")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32 "1b2ys77bkjsdmyg97i7lq3lj45q56bycvsm06d4rs656kxhvc0a3"))))
    (build-system python-build-system)
(native-search-paths (package-native-search-paths python))
(native-inputs `(("python-mock" ,python-mock) ("python-pytest" ,python-pytest) ("python-setuptools-scm" ,python-setuptools-scm))) (inputs `(("python-appdirs" ,python-appdirs) ("python-pyqt" ,python-pyqt) ("python-babel" ,python-babel) ("python-dbus" ,python-dbus) ("python-hidapi" ,python-hidapi) ("python-pyserial" ,python-pyserial) ("python-wxpython" ,python-wxpython) ("python-xlib" ,python-xlib))) (home-page "https://www.openstenoproject.org/plover/") (synopsis "Stenography engine") (description "Plover (rhymes with @emph{lover}) is a desktop application that allows anyone to use stenography to write on their computer, up to speeds of 200WPM and beyond.") (license license:gpl2+)))

Later, when making a new Plover definition, I noticed that Plover was able to see the plugin even though it didn't have the native-search-paths declared! When I asked about it, I was told:

"when you build a profile, you get a union of all installed packages in the profile, with the search paths set to $GUIX_PROFILE/thesearchpathspec, so as long as you installed the plugin, it's gonna be visible to python"

Honestly, I'm not sure what's meant by "build a profile". I suspect it means doing an upgrade.

Final package definition

The final package definition is:

(use-modules
 (guix packages)
 (guix download)
 (gnu packages python)
 (guix build-system python)
 ((guix licenses) #:prefix license:)
 (gnu packages stenography)
 (gnu packages check)
 (gnu packages python-xyz))

(define-public python-plover-python-dictionary
  (package
    (name "python-plover-python-dictionary")
    (version "1.1.0")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "plover_python_dictionary" version))
        (sha256
          (base32 "02q93q70syrfkfdbyakq42j2rxgq0nxv56xi76flcnaarfcd6lb2"))))
    (build-system python-build-system)
    (inputs
     `(("python-xlib" ,python-xlib)
       ("python-pyserial" ,python-pyserial)
       ("python-appdirs" ,python-appdirs)))
    ;; (propagated-inputs `(("python-plover" ,plover)))
    (native-inputs
      `(("python-plover" ,plover) ("python-pytest" ,python-pytest)))
    (home-page "https://github.com/benoit-pierre/plover_python_dictionary")
    (synopsis "Python dictionaries support for Plover")
    (description "Python dictionaries support for Plover")
    (license #f)))

python-plover-python-dictionary

Lessons learned

What is a Guix package?

A Guix package is actually a "record". It's basically a struct, a form of data storage where information is held in "fields" (and probably stored contigously in memory). A package definition specifies fields such as "name", "source", "inputs", etc.

Don't be afraid to grep

Start off looking at the manual. Ideally, it should have answers to common questions. When something can't be found in the docs, use grep to search the Guix source code. This, of course, means a copy of the source is available (i.e. it was cloned). To find which module something like "pypi-url" is in, run:

git grep -F pypi-uri | grep define

or

git grep -F define\*\ \(pypi-uri

Modules imported correspond to files of the same name

Modules are created (in Guile) using the "define-module" form. Often module definitions are stored in files of the same name. For example, the license module, imported with (use-modules (gnu licenses)), is stored in license.scm.

From grepping, it was found that the pypi-uri function is in the python.scm file in the guix/build-system directory. Note that there may be, and in fact are, source files with the same name. It's the path which differentiates them and that's reflected in the module call:

(use-modules
 (guix packages)
 (guix download)
(gnu packages python)
(guix build-system python))

We can see from the import statement that there are two python modules, one in gnu/packages and another in guix/build-system. This gives a hint at how the Guix project is structured.

Modules with "-xyz"

Modules whose names end in "-xyz" are for miscellaneous packages whereas non-"xyz" modules contain code which is more central. For example, python.scm contains the package definition for various Python core releases whereas python-xyz.scm has packages whose purpose don't quite fit neatly into a single category.

Footnotes:

1

This is actually not the "correct" module (quotes because it does work to create a build). The actual module that contains "pypi-uri" is (guix build-system python). This can be discovered by grepping the guix source.

2

The disambiguation is needed because Guix is written in Guile Scheme. Scheme is what's called a "Lisp-1". This means that a symbol corresponds only to a value. The value may be a function, variable, or something else. So, the prefix is needed to keep straight what thing the symbol refers to. This is in contrast to a "Lisp-2" language, like Emacs lisp or Common Lisp, where a function and a variable can share the same symbol; which to use, the function or the variable, depends on the context. See the classic "Technical Issues of Separation in Function Cells and Value Cells" for details on the differences between lisp-1 and lisp-2.

Initial: 2021-09-11 Update: 2021-10-04

Powered by peut-publier

©2021 Excalamus.com