Subject: [bug#38208] [PATCH] gnu: Add python-3.8.

From: Marius Bakke <[email-masked]>
Date: Fri, 15 Nov 2019 18:28:56 +0100

Hello Tanguy,

Tanguy Le Carrour <[email-masked]> writes:

> * gnu/packages/python.scm (python-3.8): New public variable.
> [source]: Add patches to skip four tests.
> * gnu/packages/patches/python-3.8-search-paths.patch: New file.
> * gnu/packages/patches/python-3.8-fix-tests.patch: New file.

Thank you for this!

> ++    @unittest.skipIf(True, "This fails for unknown reasons on Guix")
> +     def test_keyboard_interrupt_exit_code(self):
> +         """KeyboardInterrupt triggers exit via SIGINT."""
> +         process = subprocess.run(

I'm fairly confident that these failures are because stdin is not a
TTY.  Can you try changing to this?

@unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")

It would be good to submit a patch along these lines upstream if that
works.

> +(define-public python-3.8
> +  (package
> +    (inherit python-3.7)
> +    (version "3.8.0")
> +    (source
> +     (origin
> +       (inherit (package-source python-3.7))
> +       (uri (string-append "https://www.python.org/ftp/python/"
> +                           version "/Python-" version ".tar.xz"))
> +       (sha256 (base32 "110d0did9rxn7rg85kf2fwli5hqq44xv2d8bi7d92m7v2d728mmk"))
> +       (patches (search-patches
> +                 "python-3.8-search-paths.patch"
> +                 "python-3-fix-tests.patch"
> +                 "python-3.8-fix-tests.patch"
> +                 "python-3-deterministic-build-info.patch"))
> +       (snippet
> +        '(begin
> +           ;; Delete the bundled copy of libexpat.
> +           (delete-file-recursively "Modules/expat")
> +           (substitute* "Modules/Setup"
> +             ;; Link Expat instead of embedding the bundled one.
> +             (("^#pyexpat.*") "pyexpat pyexpat.c -lexpat\n"))
> +           #t))))))

One final question...  Do you know how stable the Python ABI is?  Are
packages compiled with 3.7 guaranteed to work with 3.8?

I wonder if we should 1) rename it to 'python-next', and 2) override
'native-search-paths' so that it searches 'lib/python3.8/site-packages'.

My concern is that e.g. 'guix environment --ad-hoc python python-numpy'
might stop working unless we rename it, and/or adjust search paths.

If Python 3.8 is fully backwards compatible, we probably don't have to
do anything, otherwise we should adjust accordingly.

Thoughts?