From 638ef1e81d83dfb1fdb7ecc5f3f80ee1151702d3 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Thu, 13 Aug 2020 00:00:54 +0200 Subject: [PATCH] gnu: conda: Update to 4.8.3. * gnu/packages/package-management.scm (python-conda): Define as deprecated alias for conda. (python2-conda): Remove variable. (conda)[arguments]: Add phases "fix-permissions", "correct-python-executable-name", "do-not-use-python-root-as-prefix", and "init"; remove phase "remove-failing-tests"; update "check" phase. [inputs]: Add python-wrapper. [native-inputs]: Move them all to... [propagated-inputs]: ...this field. Add python-conda-package-handling, python-tqdm, and zstd. [description]: Remove line about Conda as a library. --- gnu/packages/package-management.scm | 211 ++++++++++++++-------------- 1 file changed, 103 insertions(+), 108 deletions(-) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index 325007ac76..77c89af7f9 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -782,10 +782,10 @@ (define-public python-conda-package-handling extracting, creating, and converting between formats.") (license license:bsd-3))) -(define-public python-conda +(define-public conda (package - (name "python-conda") - (version "4.3.16") + (name "conda") + (version "4.8.3") (source (origin (method git-fetch) @@ -795,58 +795,118 @@ (define-public python-conda (file-name (git-file-name name version)) (sha256 (base32 - "1qwy0awx4qf2pbk8z2b7q6wdcq7mvwpxxjhg27mbirdvs5hw7hb2")))) + "0iv1qzk21jsk6vdp3106xvpvl68zgfdqb3kyzpya87jhkl204l7r")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases + (add-after 'unpack 'fix-permissions + (lambda _ + ;; This file is no longer writable after downloading with + ;; 'git-fetch' + (make-file-writable + "tests/conda_env/support/saved-env/environment.yml") + #t)) + (add-after 'unpack 'correct-python-executable-name + (lambda* (#:key inputs #:allow-other-keys) + (let ((python (assoc-ref inputs "python-wrapper"))) + #; + (substitute* "conda/common/path.py" + (("python_version or ''") + "python_version or '3'")) + (substitute* "conda/core/initialize.py" + (("python_exe = join") + (format #f "python_exe = \"~a/bin/python\" #" + python)))) + #t)) + (add-after 'unpack 'do-not-use-python-root-as-prefix + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (python (assoc-ref inputs "python-wrapper"))) + (substitute* "tests/core/test_initialize.py" + (("\"\"\"\\) % conda_prefix") + (format #f "\"\"\") % \"~a\"" python)) + (("CONDA_PYTHON_EXE \"%s\"' % join\\(conda_prefix") + (format #f "CONDA_PYTHON_EXE \"%s\"' % join(\"~a\"" + python)) + (("conda_prefix = abspath\\(sys.prefix\\)") + (format #f "conda_prefix = abspath(\"~a\")" out))) + (substitute* "conda/base/context.py" + (("os.chdir\\(sys.prefix\\)") + (format #f "os.chdir(\"~a\")" out)) + (("sys.prefix, '.condarc'") + (format #f "\"~a\", '.condarc'" out)) + (("return abspath\\(sys.prefix\\)") + (format #f "return abspath(\"~a\")" out)) + (("os.path.join\\(sys.prefix, bin_dir, exe\\)") + (format #f "\"~a/bin/conda\"" out)) + (("'CONDA_EXE', sys.executable") + (format #f "'CONDA_EXE', \"~a/bin/conda\"" out)))) + #t)) (add-before 'build 'create-version-file (lambda _ (with-output-to-file "conda/.version" (lambda () (display ,version))) #t)) - (add-before 'check 'remove-failing-tests - (lambda _ - ;; These tests require internet/network access - (let ((network-tests '("test_cli.py" - "test_create.py" - "test_export.py" - "test_fetch.py" - "test_history.py" - "test_info.py" - "test_install.py" - "test_priority.py" - "conda_env/test_cli.py" - "conda_env/test_create.py" - "conda_env/specs/test_notebook.py" - "conda_env/utils/test_notebooks.py" - "core/test_index.py" - "core/test_repodata.py"))) - (with-directory-excursion "tests" - (for-each delete-file network-tests) - - ;; FIXME: This test creates a file, then deletes it and tests - ;; that the file was deleted. For some reason it fails when - ;; building with guix, but does not when you run it in the - ;; directory left when you build with the --keep-failed - ;; option - (delete-file "gateways/disk/test_delete.py") - ;; This file is no longer writable after downloading with 'git-fetch' - (make-file-writable "conda_env/support/saved-env/environment.yml") - #t)))) (replace 'check (lambda _ (setenv "HOME" "/tmp") - (invoke "py.test")))))) - (native-inputs - `(("python-cytoolz" ,python-cytoolz) - ("python-ruamel.yaml" ,python-ruamel.yaml) - ("python-requests" ,python-requests) + (invoke "py.test" "-vv" + "-k" + (string-append + "not integration" + ;; This one reports a newer version of conda than + ;; expected. + " and not test_auto_update_conda" + ;; This fails because the output directory is not a + ;; Conda environment. + " and not test_list" + ;; This fails because we patched the default root + ;; prefix. + " and not test_default_target_is_root_prefix" + ;; TODO: I don't understand what this failure means + " and not test_PrefixData_return_value_contract" + ;; TODO: same here + " and not test_install_1" + ;; Not sure if this is really wrong. This fails because + ;; /gnu/store/...python-conda-4.8.3/bin/python + ;; is not /gnu/store/...python-wrapper-3.8.2/bin/python + " and not test_make_entry_point")))) + (add-after 'install 'init + ;; This writes a whole bunch of shell initialization files to the + ;; prefix directory. Many features of conda can only be used after + ;; running "conda init". + (lambda* (#:key inputs outputs #:allow-other-keys) + (add-installed-pythonpath inputs outputs) + (setenv "HOME" "/tmp") + + ;; "conda init" insists on using sudo, because it is hell-bent on + ;; modifying system files. + (mkdir-p "/tmp/fake-sudo") + (with-output-to-file "/tmp/fake-sudo/sudo" + (lambda () (format #t "#!~/bin/sh~%exec $@" (which "sh")))) + (chmod "/tmp/fake-sudo/sudo" #o700) + (setenv "PATH" (string-append "/tmp/fake-sudo:" + (getenv "PATH"))) + + (invoke (string-append (assoc-ref outputs "out") + "/bin/conda") + "init")))))) + (inputs + `(("python-wrapper" ,python-wrapper))) + (propagated-inputs + `(("python-anaconda-client" ,python-anaconda-client) + ("python-conda-package-handling" ,python-conda-package-handling) + ("python-cytoolz" ,python-cytoolz) ("python-pycosat" ,python-pycosat) ("python-pytest" ,python-pytest) - ("python-responses" ,python-responses) ("python-pyyaml" ,python-pyyaml) - ("python-anaconda-client" ,python-anaconda-client))) + ("python-requests" ,python-requests) + ("python-responses" ,python-responses) + ("python-ruamel.yaml" ,python-ruamel.yaml) + ("python-tqdm" ,python-tqdm) + ;; XXX: This is dragged in by libarchive and is needed at runtime. + ("zstd" ,zstd))) (home-page "https://github.com/conda/conda") (synopsis "Cross-platform, OS-agnostic, system-level binary package manager") (description @@ -854,76 +914,11 @@ (define-public python-conda is the package manager used by Anaconda installations, but it may be used for other systems as well. Conda makes environments first-class citizens, making it easy to create independent environments even for C libraries. Conda is -written entirely in Python. - -This package provides Conda as a library.") +written entirely in Python.") (license license:bsd-3))) -(define-public python2-conda - (let ((base (package-with-python2 - (strip-python2-variant python-conda)))) - (package (inherit base) - (native-inputs - `(("python2-enum34" ,python2-enum34) - ,@(package-native-inputs base)))))) - -(define-public conda - (package (inherit python-conda) - (name "conda") - (arguments - (substitute-keyword-arguments (package-arguments python-conda) - ((#:phases phases) - `(modify-phases ,phases - (replace 'build - (lambda* (#:key outputs #:allow-other-keys) - ;; This test fails when run before installation. - (delete-file "tests/test_activate.py") - - ;; Fix broken defaults - (substitute* "conda/base/context.py" - (("return sys.prefix") - (string-append "return \"" (assoc-ref outputs "out") "\"")) - (("return (prefix_is_writable\\(self.root_prefix\\))" _ match) - (string-append "return False if self.root_prefix == self.conda_prefix else " - match))) - - ;; The util/setup-testing.py is used to build conda in - ;; application form, rather than the default, library form. - ;; With this, we are able to run commands like `conda --help` - ;; directly on the command line - (invoke "python" "utils/setup-testing.py" "build_py"))) - (replace 'install - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (target (string-append out "/lib/python" - (python-version - (assoc-ref inputs "python")) - "/site-packages/"))) - ;; The installer aborts if the target directory is not on - ;; PYTHONPATH. - (setenv "PYTHONPATH" - (string-append target ":" (getenv "PYTHONPATH"))) - - ;; And it aborts if the directory doesn't exist. - (mkdir-p target) - (invoke "python" "utils/setup-testing.py" "install" - (string-append "--prefix=" out))))) - ;; The "activate" and "deactivate" scripts don't need wrapping. - ;; They also break when they are renamed. - (add-after 'wrap 'undo-wrap - (lambda* (#:key outputs #:allow-other-keys) - (with-directory-excursion (string-append (assoc-ref outputs "out") "/bin/") - (delete-file "deactivate") - (rename-file ".deactivate-real" "deactivate") - (delete-file "activate") - (rename-file ".activate-real" "activate") - #t))))))) - (description - "Conda is a cross-platform, Python-agnostic binary package manager. It -is the package manager used by Anaconda installations, but it may be used for -other systems as well. Conda makes environments first-class citizens, making -it easy to create independent environments even for C libraries. Conda is -written entirely in Python."))) +(define-public python-conda + (deprecated-package "python-conda" conda)) (define-public gwl (package