;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2020 Efraim Flashner ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2020 Marius Bakke ;;; Copyright © 2020 Tanguy Le Carrour ;;; Copyright © 2018, 2021 Maxim Cournoyer ;;; Copyright © 2021 Tobias Geerinckx-Rice ;;; Copyright © 2021, 2022 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (gnu packages python-build) #:use-module (gnu packages) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system python) #:use-module (guix gexp) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix packages)) ;;; Commentary: ;;; ;;; Python packages to build... Python packages. Since they are bound to be ;;; relied on by many, their dependencies should be kept minimal, and this ;;; module should not depend on other modules containing Python packages. ;;; ;;; Code: (define-public python-wheel (package (name "python-wheel") (version "0.37.0") (source (origin (method url-fetch) (uri (pypi-uri "wheel" version)) (sha256 (base32 "1bbga5i49rj1cwi4sjpkvfhl1f8vl9lfky2lblsy768nk4wp5vz2")))) (build-system python-build-system) (arguments ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn ;; fails to find the newly-built bdist_wheel library, even though it is ;; available on PYTHONPATH. What search path is consulted by setup.py? '(#:tests? #f)) (home-page "https://bitbucket.org/pypa/wheel/") (synopsis "Format for built Python packages") (description "A wheel is a ZIP-format archive with a specially formatted filename and the @code{.whl} extension. It is designed to contain all the files for a PEP 376 compatible install in a way that is very close to the on-disk format. Many packages will be properly installed with only the @code{Unpack} step and the unpacked archive preserves enough information to @code{Spread} (copy data and scripts to their final locations) at any later time. Wheel files can be installed with a newer @code{pip} or with 2015-07-18. (patches (search-patches "python-packaging-test-arch.patch")) (sha256 (base32 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))))) ;;; The name 'python-pypa-build' is chosen rather than 'python-build' to avoid ;;; a name clash with python-build from (guix build-system python). (define-public python-pypa-build (package (name "python-pypa-build") (version "0.7.0") (source (origin (method url-fetch) (uri (pypi-uri "build" version)) (sha256 (base32 "17xqija27x4my1yrnk6q2vwln60r39g2dhby9zg2l99qjgbdrahs")))) (build-system python-build-system) (arguments `(#:tests? #f ;to tests in the PyPI release #:phases (modify-phases %standard-phases (add-after 'unpack 'use-toml-instead-of-tomli ;; Using toml instead of tomli eases bootstrapping. (lambda _ (substitute* "setup.cfg" (("tomli>=.*") "toml\n"))))))) (propagated-inputs `(("python-packaging" ,python-packaging-bootstrap) ("python-pep517", python-pep517-bootstrap) ("python-toml" ,python-toml))) (home-page "https://pypa-build.readthedocs.io/en/latest/") (synopsis "Simple Python PEP 517 package builder") (description "The @command{build} command invokes the PEP 517 hooks to build a distribution package. It is a simple build tool and does not perform any dependency management. It aims to keep dependencies to a minimum, in order to make bootstrapping easier.") (license license:expat))) (define-public python-poetry-core (package (name "python-poetry-core") (version "1.0.7") (source (origin (method url-fetch) (uri (pypi-uri "poetry-core" version)) (sha256 (base32 "01n2rbsvks7snrq3m1d08r3xz9q2715ajb62fdb6rvqnb9sirhcq")))) (build-system python-build-system) (home-page "https://github.com/python-poetry/poetry-core") (synopsis "Poetry PEP 517 build back-end") (description "The @code{poetry-core} module provides a PEP 517 build back-end implementation developed for Poetry. This project is intended to be a light weight, fully compliant, self-contained package allowing PEP 517 compatible build front-ends to build Poetry managed projects.") (license license:expat))) ;;; This package exists to bootstrap python-tomli. (define-public python-flit-core-bootstrap (package (name "python-flit-core-bootstrap") (version "3.5.1") (source (origin (method url-fetch) (uri (pypi-uri "flit" version)) (sha256 (base32 "04152qj46sqbnlrj7ch9p7svjrrlpzbk0qr39g2yr0s4f5vp6frf")))) (build-system python-build-system) (propagated-inputs (list python-toml)) (arguments ;; flit-core has a test suite, but it requires Pytest. Disable it so ;; as to not pull pytest as an input. `(#:tests? #f #:phases (modify-phases %standard-phases (replace 'build ;; flit-core requires itself to build. Luckily, a ;; bootstrapping script exists, which does so using just ;; the checkout sources and Python. (lambda _ (invoke "python" "flit_core/build_dists.py"))) (replace 'install (lambda* (#:key inputs outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out")) (whl (car (find-files "." "\\.whl$")))) (invoke "pip" "--no-cache-dir" "--no-input" "install" "--no-deps" "--prefix" out whl)))) ;; The sanity-check phase fails because flit depends on tomli at ;; run-time, but this core variant avoids it to avoid a cycle. (delete 'sanity-check)))) (home-page "https://github.com/takluyver/flit") (synopsis "Core package of the Flit Python build system") (description "This package provides @code{flit-core}, a PEP 517 build backend for packages using Flit. The only public interface is the API specified by PEP 517, @code{flit_core.buildapi}.") (license license:bsd-3))) (define-public python-flit-core (package/inherit python-flit-core-bootstrap (name "python-flit-core") (propagated-inputs (modify-inputs (package-propagated-inputs python-flit-core-bootstrap) (replace "python-toml" python-tomli)))))