[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/12: import: pypi: Do not consider requirements.txt files.
From: |
guix-commits |
Subject: |
01/12: import: pypi: Do not consider requirements.txt files. |
Date: |
Mon, 1 Jul 2019 21:43:01 -0400 (EDT) |
apteryx pushed a commit to branch master
in repository guix.
commit 01589acc5e114e46e314777bc0d60ebfa620e4f8
Author: Maxim Cournoyer <address@hidden>
Date: Thu Mar 28 00:26:00 2019 -0400
import: pypi: Do not consider requirements.txt files.
PyPI packages are mandated to have a setup.py file, which contains a listing
of the required dependencies. The setuptools/distutils machinery embed
metadata in the archives they produce, which contains this information.
There
is no need nor gain to collect the requirements from a "requirements.txt"
file, as it is not the true record of dependencies for PyPI packages and may
contain extraneous requirements or not exist at all.
* guix/import/pypi.scm (guess-requirements): Update comment.
[guess-requirements-from-source]: Do not attempt to parse the file
requirements.txt. Streamline logic.
* tests/pypi.scm (test-requires.txt): Rename from test-requirements, to hint
at the file being tested.
("pypi->guix-package"): Adapt so that the fake package contains a
requires.txt
file rather than a requirements.txt file.
("pypi->guix-package, wheels"): Likewise.
---
guix/import/pypi.scm | 35 +++++++++++++----------------------
tests/pypi.scm | 23 ++++++++++++-----------
2 files changed, 25 insertions(+), 33 deletions(-)
diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm
index 3a20fc4..8269aa6 100644
--- a/guix/import/pypi.scm
+++ b/guix/import/pypi.scm
@@ -206,35 +206,26 @@ cannot determine package dependencies"))
(call-with-temporary-directory
(lambda (dir)
(let* ((pypi-name (string-take dirname (string-rindex dirname
#\-)))
- (req-files (list (string-append dirname
"/requirements.txt")
- (string-append dirname "/" pypi-name
".egg-info"
- "/requires.txt")))
- (exit-codes (map (lambda (file-name)
- (parameterize ((current-error-port
(%make-void-port "rw+"))
- (current-output-port
(%make-void-port "rw+")))
- (system* "tar" "xf" tarball "-C" dir
file-name)))
- req-files)))
- ;; Only one of these files needs to exist.
- (if (any zero? exit-codes)
- (match (find-files dir)
- ((file . _)
- (read-requirements file))
- (()
- (warning (G_ "No requirements file found.\n"))))
+ (requires.txt (string-append dirname "/" pypi-name
+ ".egg-info" "/requires.txt"))
+ (exit-code (parameterize ((current-error-port
(%make-void-port "rw+"))
+ (current-output-port
(%make-void-port "rw+")))
+ (system* "tar" "xf" tarball "-C" dir
requires.txt))))
+ (if (zero? exit-code)
+ (read-requirements (string-append dir "/" requires.txt))
(begin
- (warning (G_ "Failed to extract requirements files\n"))
+ (warning
+ (G_ "Failed to extract file: ~a from source.~%")
+ requires.txt)
'())))))
'())))
- ;; First, try to compute the requirements using the wheel, since that is the
- ;; most reliable option. If a wheel is not provided for this package, try
- ;; getting them by reading either the "requirements.txt" file or the
- ;; "requires.txt" from the egg-info directory from the source tarball. Note
- ;; that "requirements.txt" is not mandatory, so this is likely to fail.
+ ;; First, try to compute the requirements using the wheel, else, fallback to
+ ;; reading the "requires.txt" from the egg-info directory from the source
+ ;; tarball.
(or (guess-requirements-from-wheel)
(guess-requirements-from-source)))
-
(define (compute-inputs source-url wheel-url tarball)
"Given the SOURCE-URL of an already downloaded TARBALL, return a list of
name/variable pairs describing the required inputs of this package. Also
diff --git a/tests/pypi.scm b/tests/pypi.scm
index 6daa44a..a0271ff 100644
--- a/tests/pypi.scm
+++ b/tests/pypi.scm
@@ -23,7 +23,7 @@
#:use-module (gcrypt hash)
#:use-module (guix tests)
#:use-module (guix build-system python)
- #:use-module ((guix build utils) #:select (delete-file-recursively which))
+ #:use-module ((guix build utils) #:select (delete-file-recursively which
mkdir-p))
#:use-module (srfi srfi-64)
#:use-module (ice-9 match))
@@ -55,11 +55,12 @@
(define test-source-hash
"")
-(define test-requirements
-"# A comment
+(define test-requires.txt "\
+# A comment
# A comment after a space
bar
-baz > 13.37")
+baz > 13.37
+")
(define test-metadata
"{
@@ -107,10 +108,10 @@ baz > 13.37")
(match url
("https://example.com/foo-1.0.0.tar.gz"
(begin
- (mkdir "foo-1.0.0")
- (with-output-to-file "foo-1.0.0/requirements.txt"
+ (mkdir-p "foo-1.0.0/foo.egg-info/")
+ (with-output-to-file "foo-1.0.0/foo.egg-info/requires.txt"
(lambda ()
- (display test-requirements)))
+ (display test-requires.txt)))
(system* "tar" "czvf" file-name "foo-1.0.0/")
(delete-file-recursively "foo-1.0.0")
(set! test-source-hash
@@ -157,11 +158,11 @@ baz > 13.37")
(lambda (url file-name)
(match url
("https://example.com/foo-1.0.0.tar.gz"
- (begin
- (mkdir "foo-1.0.0")
- (with-output-to-file "foo-1.0.0/requirements.txt"
+ (begin
+ (mkdir-p "foo-1.0.0/foo.egg-info/")
+ (with-output-to-file "foo-1.0.0/foo.egg-info/requires.txt"
(lambda ()
- (display test-requirements)))
+ (display test-requires.txt)))
(system* "tar" "czvf" file-name "foo-1.0.0/")
(delete-file-recursively "foo-1.0.0")
(set! test-source-hash
- branch master updated (0f06512 -> 4b60ab8), guix-commits, 2019/07/01
- 03/12: import: pypi: Do not parse optional requirements from source., guix-commits, 2019/07/01
- 02/12: tests: pypi: Mute the output of tar., guix-commits, 2019/07/01
- 06/12: import: pypi: Support more types of archives., guix-commits, 2019/07/01
- 12/12: import: pypi: Preserve package name case when forming pypi-uri., guix-commits, 2019/07/01
- 01/12: import: pypi: Do not consider requirements.txt files.,
guix-commits <=
- 05/12: import: pypi: Deduplicate requirements., guix-commits, 2019/07/01
- 04/12: import: pypi: Improve parsing of requirement specifications., guix-commits, 2019/07/01
- 11/12: import: pypi: Update the host URI., guix-commits, 2019/07/01
- 08/12: import: pypi: Fix typo in docstring., guix-commits, 2019/07/01
- 09/12: import: pypi: Completely mute the output of the "unzip" command., guix-commits, 2019/07/01
- 07/12: import: pypi: Parse wheel METADATA instead of metadata.json., guix-commits, 2019/07/01
- 10/12: import: pypi: Include optional test inputs as native-inputs., guix-commits, 2019/07/01