diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index 0a0d8e59ed..395fb72ecf 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -57806,6 +57806,285 @@ (define-public rust-pwd-1
     (description "This package provides a safe interface to @code{pwd.h}.")
     (license license:public-domain)))
 
+(define-public rust-pyo3-0.20
+  (package
+    (name "rust-pyo3")
+    (version "0.20.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pyo3" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1q3g7ppg2qskigbgqg3w9280klkil5is9hhyps1ykl2hb1xdr2cs"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-anyhow" ,rust-anyhow-1)
+                       ("rust-cfg-if" ,rust-cfg-if-1)
+                       ("rust-chrono" ,rust-chrono-0.4)
+                       ("rust-either" ,rust-either-1)
+                       ("rust-eyre" ,rust-eyre-0.6)
+                       ("rust-hashbrown" ,rust-hashbrown-0.14)
+                       ("rust-indexmap" ,rust-indexmap-2)
+                       ("rust-indoc" ,rust-indoc-2)
+                       ("rust-inventory" ,rust-inventory-0.3)
+                       ("rust-libc" ,rust-libc-0.2)
+                       ("rust-memoffset" ,rust-memoffset-0.9)
+                       ("rust-num-bigint" ,rust-num-bigint-0.4)
+                       ("rust-num-complex" ,rust-num-complex-0.4)
+                       ("rust-parking-lot" ,rust-parking-lot-0.12)
+                       ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.20)
+                       ("rust-pyo3-ffi" ,rust-pyo3-ffi-0.20)
+                       ("rust-pyo3-macros" ,rust-pyo3-macros-0.20)
+                       ("rust-rust-decimal" ,rust-rust-decimal-1)
+                       ("rust-serde" ,rust-serde-1)
+                       ("rust-smallvec" ,rust-smallvec-1)
+                       ("rust-unindent" ,rust-unindent-0.2))
+       #:cargo-development-inputs (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
+                                   ("rust-chrono" ,rust-chrono-0.4)
+                                   ("rust-proptest" ,rust-proptest-1)
+                                   ("rust-rayon" ,rust-rayon-1)
+                                   ("rust-send-wrapper" ,rust-send-wrapper-0.6)
+                                   ("rust-serde" ,rust-serde-1)
+                                   ("rust-serde-json" ,rust-serde-json-1)
+                                   ("rust-trybuild" ,rust-trybuild-1)
+                                   ("rust-widestring" ,rust-widestring-0.5))))
+    (inputs (list python))
+    (home-page "https://github.com/pyo3/pyo3")
+    (synopsis "Rust bindings for the Python interpreter")
+    (description
+     "This package provides Rust bindings for Python, including tools for
+creating native Python extension modules.  Running and interacting with
+Python code from a Rust binary is also supported.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-pyo3-0.19
+  (package
+    (inherit rust-pyo3-0.20)
+    (name "rust-pyo3")
+    (version "0.19.2")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "pyo3" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0f1aqx947mzsrk05zdm9w2702lj5k9s97y9w9lxwkp2avk7sd0g6"))))
+    (arguments
+     `(#:cargo-test-flags
+       '("--release" "--"
+         "--skip=exceptions::PyUnicodeDecodeError::new_utf8")
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-eyre" ,rust-eyre-0.6)
+        ("rust-hashbrown" ,rust-hashbrown-0.14)
+        ("rust-indexmap" ,rust-indexmap-2)
+        ("rust-indoc" ,rust-indoc-1)
+        ("rust-inventory" ,rust-inventory-0.3)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-memoffset" ,rust-memoffset-0.9)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-num-complex" ,rust-num-complex-0.4)
+        ("rust-parking-lot" ,rust-parking-lot-0.12)
+        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.19)
+        ("rust-pyo3-ffi" ,rust-pyo3-ffi-0.19)
+        ("rust-pyo3-macros" ,rust-pyo3-macros-0.19)
+        ("rust-rust-decimal" ,rust-rust-decimal-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-unindent" ,rust-unindent-0.1))
+       #:cargo-development-inputs
+       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-proptest" ,rust-proptest-0.10)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-rust-decimal" ,rust-rust-decimal-1)
+        ("rust-rustversion" ,rust-rustversion-1)
+        ("rust-send-wrapper" ,rust-send-wrapper-0.6)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-trybuild" ,rust-trybuild-1)
+        ("rust-widestring" ,rust-widestring-0.5))))))
+
+(define-public rust-pyo3-0.18
+  (package
+    (inherit rust-pyo3-0.19)
+    (name "rust-pyo3")
+    (version "0.18.3")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "pyo3" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "02914yszvcg7qzh1kkrhiz8qqi0p9pbzi1cpmbyk9fii6xdsrcg3"))))
+    (arguments
+     `(#:cargo-test-flags
+       '("--release" "--"
+         "--skip=test_compile_errors"
+         "--skip=exceptions::PyUnicodeDecodeError::new_utf8")
+       #:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-eyre" ,rust-eyre-0.6)
+        ("rust-hashbrown" ,rust-hashbrown-0.12)
+        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-indoc" ,rust-indoc-1)
+        ("rust-inventory" ,rust-inventory-0.3)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-memoffset" ,rust-memoffset-0.8)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-num-complex" ,rust-num-complex-0.4)
+        ("rust-parking-lot" ,rust-parking-lot-0.12)
+        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.18)
+        ("rust-pyo3-ffi" ,rust-pyo3-ffi-0.18)
+        ("rust-pyo3-macros" ,rust-pyo3-macros-0.18)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-unindent" ,rust-unindent-0.1))
+       #:cargo-development-inputs
+       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
+        ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-criterion" ,rust-criterion-0.3)
+        ("rust-proptest" ,rust-proptest-0.10)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-rustversion" ,rust-rustversion-1)
+        ("rust-send-wrapper" ,rust-send-wrapper-0.6)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-trybuild" ,rust-trybuild-1)
+        ("rust-widestring" ,rust-widestring-0.5))))))
+
+(define-public rust-pyo3-0.16
+  (package
+    (inherit rust-pyo3-0.19)
+    (name "rust-pyo3")
+    (version "0.16.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pyo3" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1jn6nhp9a8i5kfwds6fzy3hzb938qim8bajp8gfkkcn9892c8802"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-eyre" ,rust-eyre-0.6)
+        ("rust-hashbrown" ,rust-hashbrown-0.11)
+        ("rust-indexmap" ,rust-indexmap-1.7)
+        ("rust-indoc" ,rust-indoc-1)
+        ("rust-inventory" ,rust-inventory-0.2)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-num-complex" ,rust-num-complex-0.4)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.16)
+        ("rust-pyo3-ffi" ,rust-pyo3-ffi-0.16)
+        ("rust-pyo3-macros" ,rust-pyo3-macros-0.16)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-unindent" ,rust-unindent-0.1))
+       #:cargo-development-inputs
+       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
+        ("rust-criterion" ,rust-criterion-0.3)
+        ("rust-proptest" ,rust-proptest-0.10)
+        ("rust-rustversion" ,rust-rustversion-1)
+        ("rust-send-wrapper" ,rust-send-wrapper-0.5)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-trybuild" ,rust-trybuild-1)
+        ("rust-widestring" ,rust-widestring-0.5))
+       ;; SIGSEGV: invalid memory reference
+       #:tests? #f))))
+
+(define-public rust-pyo3-0.15
+  (package
+    (inherit rust-pyo3-0.16)
+    (name "rust-pyo3")
+    (version "0.15.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "pyo3" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0ljp3m1frg8y50al4cbadwxfwwrgsvslmljclp4cf20y4ykm07fl"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin (substitute* "Cargo.toml"
+                  (("\"=([[:digit:]]+(\\.[[:digit:]]+)*)" _ version)
+                   (string-append "\"^" version)))))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-eyre" ,rust-eyre-0.6)
+        ("rust-hashbrown" ,rust-hashbrown-0.11)
+        ("rust-indexmap" ,rust-indexmap-1.7)
+        ("rust-indoc" ,rust-indoc-0.3)
+        ("rust-inventory" ,rust-inventory-0.1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-num-complex" ,rust-num-complex-0.4)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-paste" ,rust-paste-0.1)
+        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.15)
+        ("rust-pyo3-macros" ,rust-pyo3-macros-0.15)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-unindent" ,rust-unindent-0.1))
+       #:cargo-development-inputs
+       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-criterion" ,rust-criterion-0.3)
+        ("rust-half" ,rust-half-1)
+        ("rust-proptest" ,rust-proptest-0.10)
+        ("rust-rustversion" ,rust-rustversion-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-trybuild" ,rust-trybuild-1))
+       ;; FIXME: fails to initialize Python interpreter.
+       #:tests? #f))))
+
+(define-public rust-pyo3-0.13
+  (package
+    (inherit rust-pyo3-0.15)
+    (name "rust-pyo3")
+    (version "0.13.2")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "pyo3" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1hq965lgi25dn578fpn9hjva6zjr1c8rl7lxywijq44aw7lbhds8"))))
+    (arguments
+     `(#:skip-build? #true
+       #:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-ctor" ,rust-ctor-0.1)
+        ("rust-hashbrown" ,rust-hashbrown-0.9)
+        ("rust-indoc" ,rust-indoc-0.3)
+        ("rust-inventory" ,rust-inventory-0.1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-num-bigint" ,rust-num-bigint-0.3)
+        ("rust-num-complex" ,rust-num-complex-0.3)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-paste" ,rust-paste-0.1)
+        ("rust-pyo3-macros" ,rust-pyo3-macros-0.13)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-unindent" ,rust-unindent-0.1))
+       #:cargo-development-inputs
+       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
+        ("rust-bitflags" ,rust-bitflags-1.2)
+        ("rust-criterion" ,rust-criterion-0.3)
+        ("rust-half" ,rust-half-1)
+        ("rust-proptest" ,rust-proptest-0.10)
+        ("rust-rustversion" ,rust-rustversion-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-trybuild" ,rust-trybuild-1))))))
+
 (define-public rust-pyo3-build-config-0.20
   (package
     (name "rust-pyo3-build-config")
@@ -58009,103 +58288,6 @@ (define-public rust-pyo3-log-0.8
 extension to python.")
     (license (list license:asl2.0 license:expat))))
 
-(define-public rust-pyo3-macros-backend-0.20
-  (package
-    (name "rust-pyo3-macros-backend")
-    (version "0.20.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "pyo3-macros-backend" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "07w8x1wxm1ksx72jb0w1p2ssmg9zh95dsv4xmxyq4iqqhpa11j8g"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs (("rust-heck" ,rust-heck-0.4)
-                       ("rust-proc-macro2" ,rust-proc-macro2-1)
-                       ("rust-quote" ,rust-quote-1)
-                       ("rust-syn" ,rust-syn-2))))
-    (home-page "https://github.com/pyo3/pyo3")
-    (synopsis "Code generation for PyO3")
-    (description
-     "This package provides code generation backends for PyO3.")
-    (license (list license:expat license:asl2.0))))
-
-(define-public rust-pyo3-macros-backend-0.19
-  (package
-    (inherit rust-pyo3-macros-backend-0.20)
-    (name "rust-pyo3-macros-backend")
-    (version "0.19.2")
-    (source (origin
-              (method url-fetch)
-              (uri (crate-uri "pyo3-macros-backend" version))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0dlm4pg29hjmlqx15gcy9cmnabvc8ycy60hcvjg8hm62flhw2zcl"))))
-    (arguments
-     `(#:cargo-inputs
-       (("rust-proc-macro2" ,rust-proc-macro2-1)
-        ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))))
-
-(define-public rust-pyo3-macros-backend-0.18
-  (package
-    (inherit rust-pyo3-macros-backend-0.19)
-    (name "rust-pyo3-macros-backend")
-    (version "0.18.3")
-    (source (origin
-              (method url-fetch)
-              (uri (crate-uri "pyo3-macros-backend" version))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "062rxf7cj1dn82yiaws3dmxw5qq9ssccq92jgdc210y4lh4gznlp"))))
-    (arguments
-     `(#:cargo-inputs
-       (("rust-proc-macro2" ,rust-proc-macro2-1)
-        ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))))
-
-(define-public rust-pyo3-macros-backend-0.16
-  (package
-    (inherit rust-pyo3-macros-backend-0.19)
-    (name "rust-pyo3-macros-backend")
-    (version "0.16.6")
-    (source (origin
-              (method url-fetch)
-              (uri (crate-uri "pyo3-macros-backend" version))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1f0y9vxmyq1cidk544pwg3my30f6xfqfgf42grw4gx4q5pl687v1"))))
-    (arguments
-     `(#:cargo-inputs
-       (("rust-proc-macro2" ,rust-proc-macro2-1)
-        ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))))
-
-(define-public rust-pyo3-macros-backend-0.15
-  (package
-    (inherit rust-pyo3-macros-backend-0.16)
-    (name "rust-pyo3-macros-backend")
-    (version "0.15.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "pyo3-macros-backend" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "15bhc1xib9yz4l1sd2lk3nc7scbqsjfvgvlr3mj0xq0jqh92i32s"))))
-    (arguments
-     `(#:cargo-inputs
-       (("rust-proc-macro2" ,rust-proc-macro2-1)
-        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.15)
-        ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))
-    (native-inputs (list python))))
-
 (define-public rust-pyo3-macros-0.20
   (package
     (name "rust-pyo3-macros")
@@ -58167,25 +58349,6 @@ (define-public rust-pyo3-macros-0.18
         ("rust-quote" ,rust-quote-1)
         ("rust-syn" ,rust-syn-1))))))
 
-(define-public rust-pyo3-macros-backend-0.13
-  (package
-    (inherit rust-pyo3-macros-backend-0.15)
-    (name "rust-pyo3-macros-backend")
-    (version "0.13.2")
-    (source (origin
-              (method url-fetch)
-              (uri (crate-uri "pyo3-macros-backend" version))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0rjxayd78l10hnyphk03bcvhm0jpsvnzn07lczhy7jsgv3jrgc47"))))
-    (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-proc-macro2" ,rust-proc-macro2-1)
-        ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))))
-
 (define-public rust-pyo3-macros-0.16
   (package
     (inherit rust-pyo3-macros-0.19)
@@ -58224,303 +58387,140 @@ (define-public rust-pyo3-macros-0.15
         ("rust-syn" ,rust-syn-1))))
     (native-inputs (list python))))
 
-(define-public rust-pyo3-0.20
+(define-public rust-pyo3-macros-0.13
   (package
-    (name "rust-pyo3")
+    (inherit rust-pyo3-macros-0.15)
+    (name "rust-pyo3-macros")
+    (version "0.13.2")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "pyo3-macros" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1fxi5lx5dl7xh469gr5xckyjy3r3c5dqypzxcj0fbhzf1hq2qzx4"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-pyo3-macros-backend" ,rust-pyo3-macros-backend-0.13)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))))
+
+(define-public rust-pyo3-macros-backend-0.20
+  (package
+    (name "rust-pyo3-macros-backend")
     (version "0.20.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (crate-uri "pyo3" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1q3g7ppg2qskigbgqg3w9280klkil5is9hhyps1ykl2hb1xdr2cs"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs (("rust-anyhow" ,rust-anyhow-1)
-                       ("rust-cfg-if" ,rust-cfg-if-1)
-                       ("rust-chrono" ,rust-chrono-0.4)
-                       ("rust-either" ,rust-either-1)
-                       ("rust-eyre" ,rust-eyre-0.6)
-                       ("rust-hashbrown" ,rust-hashbrown-0.14)
-                       ("rust-indexmap" ,rust-indexmap-2)
-                       ("rust-indoc" ,rust-indoc-2)
-                       ("rust-inventory" ,rust-inventory-0.3)
-                       ("rust-libc" ,rust-libc-0.2)
-                       ("rust-memoffset" ,rust-memoffset-0.9)
-                       ("rust-num-bigint" ,rust-num-bigint-0.4)
-                       ("rust-num-complex" ,rust-num-complex-0.4)
-                       ("rust-parking-lot" ,rust-parking-lot-0.12)
-                       ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.20)
-                       ("rust-pyo3-ffi" ,rust-pyo3-ffi-0.20)
-                       ("rust-pyo3-macros" ,rust-pyo3-macros-0.20)
-                       ("rust-rust-decimal" ,rust-rust-decimal-1)
-                       ("rust-serde" ,rust-serde-1)
-                       ("rust-smallvec" ,rust-smallvec-1)
-                       ("rust-unindent" ,rust-unindent-0.2))
-       #:cargo-development-inputs (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
-                                   ("rust-chrono" ,rust-chrono-0.4)
-                                   ("rust-proptest" ,rust-proptest-1)
-                                   ("rust-rayon" ,rust-rayon-1)
-                                   ("rust-send-wrapper" ,rust-send-wrapper-0.6)
-                                   ("rust-serde" ,rust-serde-1)
-                                   ("rust-serde-json" ,rust-serde-json-1)
-                                   ("rust-trybuild" ,rust-trybuild-1)
-                                   ("rust-widestring" ,rust-widestring-0.5))))
-    (inputs (list python))
+       (method url-fetch)
+       (uri (crate-uri "pyo3-macros-backend" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "07w8x1wxm1ksx72jb0w1p2ssmg9zh95dsv4xmxyq4iqqhpa11j8g"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-heck" ,rust-heck-0.4)
+                       ("rust-proc-macro2" ,rust-proc-macro2-1)
+                       ("rust-quote" ,rust-quote-1)
+                       ("rust-syn" ,rust-syn-2))))
     (home-page "https://github.com/pyo3/pyo3")
-    (synopsis "Rust bindings for the Python interpreter")
+    (synopsis "Code generation for PyO3")
     (description
-     "This package provides Rust bindings for Python, including tools for
-creating native Python extension modules.  Running and interacting with
-Python code from a Rust binary is also supported.")
+     "This package provides code generation backends for PyO3.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-pyo3-0.19
+(define-public rust-pyo3-macros-backend-0.19
   (package
-    (inherit rust-pyo3-0.20)
-    (name "rust-pyo3")
+    (inherit rust-pyo3-macros-backend-0.20)
+    (name "rust-pyo3-macros-backend")
     (version "0.19.2")
     (source (origin
               (method url-fetch)
-              (uri (crate-uri "pyo3" version))
+              (uri (crate-uri "pyo3-macros-backend" version))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0f1aqx947mzsrk05zdm9w2702lj5k9s97y9w9lxwkp2avk7sd0g6"))))
+                "0dlm4pg29hjmlqx15gcy9cmnabvc8ycy60hcvjg8hm62flhw2zcl"))))
     (arguments
-     `(#:cargo-test-flags
-       '("--release" "--"
-         "--skip=exceptions::PyUnicodeDecodeError::new_utf8")
-       #:cargo-inputs
-       (("rust-anyhow" ,rust-anyhow-1)
-        ("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-chrono" ,rust-chrono-0.4)
-        ("rust-eyre" ,rust-eyre-0.6)
-        ("rust-hashbrown" ,rust-hashbrown-0.14)
-        ("rust-indexmap" ,rust-indexmap-2)
-        ("rust-indoc" ,rust-indoc-1)
-        ("rust-inventory" ,rust-inventory-0.3)
-        ("rust-libc" ,rust-libc-0.2)
-        ("rust-memoffset" ,rust-memoffset-0.9)
-        ("rust-num-bigint" ,rust-num-bigint-0.4)
-        ("rust-num-complex" ,rust-num-complex-0.4)
-        ("rust-parking-lot" ,rust-parking-lot-0.12)
-        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.19)
-        ("rust-pyo3-ffi" ,rust-pyo3-ffi-0.19)
-        ("rust-pyo3-macros" ,rust-pyo3-macros-0.19)
-        ("rust-rust-decimal" ,rust-rust-decimal-1)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-unindent" ,rust-unindent-0.1))
-       #:cargo-development-inputs
-       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
-        ("rust-chrono" ,rust-chrono-0.4)
-        ("rust-proptest" ,rust-proptest-0.10)
-        ("rust-rayon" ,rust-rayon-1)
-        ("rust-rust-decimal" ,rust-rust-decimal-1)
-        ("rust-rustversion" ,rust-rustversion-1)
-        ("rust-send-wrapper" ,rust-send-wrapper-0.6)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-trybuild" ,rust-trybuild-1)
-        ("rust-widestring" ,rust-widestring-0.5))))))
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))))
 
-(define-public rust-pyo3-0.18
+(define-public rust-pyo3-macros-backend-0.18
   (package
-    (inherit rust-pyo3-0.19)
-    (name "rust-pyo3")
+    (inherit rust-pyo3-macros-backend-0.19)
+    (name "rust-pyo3-macros-backend")
     (version "0.18.3")
     (source (origin
               (method url-fetch)
-              (uri (crate-uri "pyo3" version))
+              (uri (crate-uri "pyo3-macros-backend" version))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "02914yszvcg7qzh1kkrhiz8qqi0p9pbzi1cpmbyk9fii6xdsrcg3"))))
-    (arguments
-     `(#:cargo-test-flags
-       '("--release" "--"
-         "--skip=test_compile_errors"
-         "--skip=exceptions::PyUnicodeDecodeError::new_utf8")
-       #:cargo-inputs
-       (("rust-anyhow" ,rust-anyhow-1)
-        ("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-chrono" ,rust-chrono-0.4)
-        ("rust-eyre" ,rust-eyre-0.6)
-        ("rust-hashbrown" ,rust-hashbrown-0.12)
-        ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-indoc" ,rust-indoc-1)
-        ("rust-inventory" ,rust-inventory-0.3)
-        ("rust-libc" ,rust-libc-0.2)
-        ("rust-memoffset" ,rust-memoffset-0.8)
-        ("rust-num-bigint" ,rust-num-bigint-0.4)
-        ("rust-num-complex" ,rust-num-complex-0.4)
-        ("rust-parking-lot" ,rust-parking-lot-0.12)
-        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.18)
-        ("rust-pyo3-ffi" ,rust-pyo3-ffi-0.18)
-        ("rust-pyo3-macros" ,rust-pyo3-macros-0.18)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-unindent" ,rust-unindent-0.1))
-       #:cargo-development-inputs
-       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
-        ("rust-chrono" ,rust-chrono-0.4)
-        ("rust-criterion" ,rust-criterion-0.3)
-        ("rust-proptest" ,rust-proptest-0.10)
-        ("rust-rayon" ,rust-rayon-1)
-        ("rust-rustversion" ,rust-rustversion-1)
-        ("rust-send-wrapper" ,rust-send-wrapper-0.6)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-trybuild" ,rust-trybuild-1)
-        ("rust-widestring" ,rust-widestring-0.5))))))
-
-(define-public rust-pyo3-0.16
-  (package
-    (inherit rust-pyo3-0.19)
-    (name "rust-pyo3")
-    (version "0.16.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "pyo3" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1jn6nhp9a8i5kfwds6fzy3hzb938qim8bajp8gfkkcn9892c8802"))))
+                "062rxf7cj1dn82yiaws3dmxw5qq9ssccq92jgdc210y4lh4gznlp"))))
     (arguments
      `(#:cargo-inputs
-       (("rust-anyhow" ,rust-anyhow-1)
-        ("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-eyre" ,rust-eyre-0.6)
-        ("rust-hashbrown" ,rust-hashbrown-0.11)
-        ("rust-indexmap" ,rust-indexmap-1.7)
-        ("rust-indoc" ,rust-indoc-1)
-        ("rust-inventory" ,rust-inventory-0.2)
-        ("rust-libc" ,rust-libc-0.2)
-        ("rust-num-bigint" ,rust-num-bigint-0.4)
-        ("rust-num-complex" ,rust-num-complex-0.4)
-        ("rust-parking-lot" ,rust-parking-lot-0.11)
-        ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.16)
-        ("rust-pyo3-ffi" ,rust-pyo3-ffi-0.16)
-        ("rust-pyo3-macros" ,rust-pyo3-macros-0.16)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-unindent" ,rust-unindent-0.1))
-       #:cargo-development-inputs
-       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
-        ("rust-criterion" ,rust-criterion-0.3)
-        ("rust-proptest" ,rust-proptest-0.10)
-        ("rust-rustversion" ,rust-rustversion-1)
-        ("rust-send-wrapper" ,rust-send-wrapper-0.5)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-trybuild" ,rust-trybuild-1)
-        ("rust-widestring" ,rust-widestring-0.5))
-       ;; SIGSEGV: invalid memory reference
-       #:tests? #f))))
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))))
 
-(define-public rust-pyo3-macros-0.13
+(define-public rust-pyo3-macros-backend-0.16
   (package
-    (inherit rust-pyo3-macros-0.15)
-    (name "rust-pyo3-macros")
-    (version "0.13.2")
+    (inherit rust-pyo3-macros-backend-0.19)
+    (name "rust-pyo3-macros-backend")
+    (version "0.16.6")
     (source (origin
               (method url-fetch)
-              (uri (crate-uri "pyo3-macros" version))
+              (uri (crate-uri "pyo3-macros-backend" version))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1fxi5lx5dl7xh469gr5xckyjy3r3c5dqypzxcj0fbhzf1hq2qzx4"))))
+                "1f0y9vxmyq1cidk544pwg3my30f6xfqfgf42grw4gx4q5pl687v1"))))
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-pyo3-macros-backend" ,rust-pyo3-macros-backend-0.13)
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
         ("rust-syn" ,rust-syn-1))))))
 
-(define-public rust-pyo3-0.15
+(define-public rust-pyo3-macros-backend-0.15
   (package
-    (inherit rust-pyo3-0.16)
-    (name "rust-pyo3")
+    (inherit rust-pyo3-macros-backend-0.16)
+    (name "rust-pyo3-macros-backend")
     (version "0.15.2")
     (source
      (origin
        (method url-fetch)
-       (uri (crate-uri "pyo3" version))
+       (uri (crate-uri "pyo3-macros-backend" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0ljp3m1frg8y50al4cbadwxfwwrgsvslmljclp4cf20y4ykm07fl"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin (substitute* "Cargo.toml"
-                  (("\"=([[:digit:]]+(\\.[[:digit:]]+)*)" _ version)
-                   (string-append "\"^" version)))))))
+        (base32 "15bhc1xib9yz4l1sd2lk3nc7scbqsjfvgvlr3mj0xq0jqh92i32s"))))
     (arguments
      `(#:cargo-inputs
-       (("rust-anyhow" ,rust-anyhow-1)
-        ("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-eyre" ,rust-eyre-0.6)
-        ("rust-hashbrown" ,rust-hashbrown-0.11)
-        ("rust-indexmap" ,rust-indexmap-1.7)
-        ("rust-indoc" ,rust-indoc-0.3)
-        ("rust-inventory" ,rust-inventory-0.1)
-        ("rust-libc" ,rust-libc-0.2)
-        ("rust-num-bigint" ,rust-num-bigint-0.4)
-        ("rust-num-complex" ,rust-num-complex-0.4)
-        ("rust-parking-lot" ,rust-parking-lot-0.11)
-        ("rust-paste" ,rust-paste-0.1)
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.15)
-        ("rust-pyo3-macros" ,rust-pyo3-macros-0.15)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-unindent" ,rust-unindent-0.1))
-       #:cargo-development-inputs
-       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
-        ("rust-bitflags" ,rust-bitflags-1)
-        ("rust-clap" ,rust-clap-2)
-        ("rust-criterion" ,rust-criterion-0.3)
-        ("rust-half" ,rust-half-1)
-        ("rust-proptest" ,rust-proptest-0.10)
-        ("rust-rustversion" ,rust-rustversion-1)
-        ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-trybuild" ,rust-trybuild-1))
-       ;; FIXME: fails to initialize Python interpreter.
-       #:tests? #f))))
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (native-inputs (list python))))
 
-(define-public rust-pyo3-0.13
+(define-public rust-pyo3-macros-backend-0.13
   (package
-    (inherit rust-pyo3-0.15)
-    (name "rust-pyo3")
+    (inherit rust-pyo3-macros-backend-0.15)
+    (name "rust-pyo3-macros-backend")
     (version "0.13.2")
     (source (origin
               (method url-fetch)
-              (uri (crate-uri "pyo3" version))
+              (uri (crate-uri "pyo3-macros-backend" version))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1hq965lgi25dn578fpn9hjva6zjr1c8rl7lxywijq44aw7lbhds8"))))
+                "0rjxayd78l10hnyphk03bcvhm0jpsvnzn07lczhy7jsgv3jrgc47"))))
     (arguments
-     `(#:skip-build? #true
+     `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-ctor" ,rust-ctor-0.1)
-        ("rust-hashbrown" ,rust-hashbrown-0.9)
-        ("rust-indoc" ,rust-indoc-0.3)
-        ("rust-inventory" ,rust-inventory-0.1)
-        ("rust-libc" ,rust-libc-0.2)
-        ("rust-num-bigint" ,rust-num-bigint-0.3)
-        ("rust-num-complex" ,rust-num-complex-0.3)
-        ("rust-parking-lot" ,rust-parking-lot-0.11)
-        ("rust-paste" ,rust-paste-0.1)
-        ("rust-pyo3-macros" ,rust-pyo3-macros-0.13)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-unindent" ,rust-unindent-0.1))
-       #:cargo-development-inputs
-       (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
-        ("rust-bitflags" ,rust-bitflags-1.2)
-        ("rust-criterion" ,rust-criterion-0.3)
-        ("rust-half" ,rust-half-1)
-        ("rust-proptest" ,rust-proptest-0.10)
-        ("rust-rustversion" ,rust-rustversion-1)
-        ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-trybuild" ,rust-trybuild-1))))))
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))))
 
 (define-public rust-pyproject-toml-0.8
   (package
