[PATCH 0/2] Add pipx package manager for Python applications

  • Open
  • quality assurance status badge
Details
One participant
  • Wojtek Kosior
Owner
unassigned
Submitted by
Wojtek Kosior
Severity
normal
W
W
Wojtek Kosior wrote on 26 Jul 2023 11:05
(address . guix-patches@gnu.org)(name . Wojtek Kosior)(address . koszko@koszko.org)
cover.1690360848.git.koszko@koszko.org
This series adds pipx, a tool similar to pip but oriented towards installation
of Python applications rather than libraries, with automatic isolation of
installed packages.

Other distros are now changing pip to recommend using pipx instead[1]. Whether
or not Guix will do the same, it seems like a good idea to at least have pipx
available in the repos.

I was unsure whether python-pipx should go into python-build or
python-xyz. python-pip is declared in the former, python-virtualenv in the
latter. In the end I chose python-xyz.

Tests have been disabled because those of python-userpath rely on `docker pull`
and those of python-pipx rely on application wheels from PyPI. It might be
possible to enable at least some tests of python-pipx by using wheels from
Guix. Rn I did not, however, have time to investigate.

I tested the new package(s) with:

#BEGIN_EXAMPLE
./pre-inst-env guix lint python-userpath python-pipx
guix gc -D /gnu/store/*python-userpath-1.9.0 /gnu/store/*python-pipx-1.2.0
./pre-inst-env guix build python-userpath --rounds=3
./pre-inst-env guix build python-pipx --rounds=3
./pre-inst-env guix shell -C coreutils python-pipx findutils which less bash --network --no-cwd
pipx install pycowsay
pipx ensurepath
bash -l
pycowsay moooo
pipx uninstall pycowsay
#END_EXAMPLE


Wojtek Kosior (2):
gnu: Add python-userpath.
gnu: Add python-pipx.

gnu/packages/python-xyz.scm | 77 +++++++++++++++++++++++++++++++++++++
1 file changed, 77 insertions(+)


base-commit: 76e041f9eef85bb039c5251d3350c62ee2066883
--
2.41.0
W
W
Wojtek Kosior wrote on 26 Jul 2023 11:09
[PATCH 1/2] gnu: Add python-userpath.
(address . 64869@debbugs.gnu.org)(name . Wojtek Kosior)(address . koszko@koszko.org)
f579128c1021f877aa77727d852ff02c19da9c23.1690360848.git.koszko@koszko.org
* gnu/packages/python-xyz.scm (python-userpath): New variable.
---
gnu/packages/python-xyz.scm | 39 +++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)

Toggle diff (59 lines)
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index db3e69fb45..022d26694c 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -139,6 +139,7 @@
;;; Copyright © 2023 Dominik Delgado Steuter <d@delgado.nrw>
;;; Copyright © 2023 Ivan Vilata-i-Balaguer <ivan@selidor.net>
;;; Copyright © 2023 Ontje Lünsdorf <ontje.luensdorf@dlr.de>
+;;; Copyright © 2023 Wojtek Kosior <my-contribution-is-licensed-cc0@koszko.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -5223,6 +5224,44 @@ (define-public python-virtualenv-clone
"Clone non-relocatable virtualenvs without breaking site-packages.")
(license license:expat)))
+(define-public python-userpath
+ (package
+ (name "python-userpath")
+ (version "1.9.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ofek/userpath")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1zrbjb54h5p7f1xadk93by1663asr38jg6qs1jsaalsfz7x83v3z"))))
+ (build-system pyproject-build-system)
+ (native-inputs (list python-hatchling))
+ (arguments
+ `(#:tests? #f ;tests depend on a docker image
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'install-doc
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((doc (string-append (assoc-ref outputs "out") "/share/doc")))
+ (mkdir-p doc)
+ (for-each (lambda (file)
+ (copy-file (string-append "." file)
+ (string-append doc file)))
+ '("/HISTORY.rst" "/LICENSE.txt"))))))))
+ (propagated-inputs (list python-click))
+ (home-page "https://pypi.org/project/userpath/")
+ (synopsis "Cross-platform tool for adding locations to the user PATH")
+ (description "@code{userpath} can be used to make permanent changes to
+user's PATH. It does so by modifying command line shell's initialization
+files.
+
+You may instead want to use @code{guix home} to define PATH declaratively.
+This tool is unfortunately not compatible with {guix home}.")
+ (license license:expat)))
+
(define-public python-uc-micro-py
(package
(name "python-uc-micro-py")
--
2.41.0
W
W
Wojtek Kosior wrote on 26 Jul 2023 11:09
[PATCH 2/2] gnu: Add python-pipx.
(address . 64869@debbugs.gnu.org)(name . Wojtek Kosior)(address . koszko@koszko.org)
ce0bdf79a0aa89760d2e7590a3a9702a51ddec31.1690360848.git.koszko@koszko.org
* gnu/packages/python-xyz.scm (python-pipx): New variable.
---
gnu/packages/python-xyz.scm | 38 +++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)

Toggle diff (51 lines)
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 022d26694c..c7f2bb4a4e 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -5262,6 +5262,44 @@ (define-public python-userpath
This tool is unfortunately not compatible with {guix home}.")
(license license:expat)))
+(define-public python-pipx
+ (package
+ (name "python-pipx")
+ (version "1.2.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/pypa/pipx")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "112vmvd5h7gmpr8flar4848h6gm0i2s52s8xa5dbiffdr7xx0vwn"))))
+ (build-system pyproject-build-system)
+ (arguments
+ `(#:tests? #f ;tests require a bunch of wheels from the network
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'install-doc
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((doc (string-append (assoc-ref outputs "out") "/share/doc")))
+ (mkdir-p doc)
+ (for-each (lambda (file)
+ (copy-file (string-append "." file)
+ (string-append doc file)))
+ '("/CHANGELOG.md" "/LICENSE"))))))))
+ (native-inputs (list python-hatchling))
+ (propagated-inputs (list python-argcomplete
+ python-packaging
+ python-userpath))
+ (home-page "https://pypa.github.io/pipx/")
+ (synopsis "Install and run python applications in isolated environments")
+ (description
+ "@code{pipx} is a tool to help you install and run end-user applications
+written in Python. It's roughly similar to JavaScript's @code{npx}, and
+Trisquel's @code{apt}.")
+ (license license:expat)))
+
(define-public python-uc-micro-py
(package
(name "python-uc-micro-py")
--
2.41.0
?