From e4eba8d72b84aaa460c7d1b1ac54b607e844d782 Mon Sep 17 00:00:00 2001 From: Mitchell Robert Vollger Date: Mon, 5 Jun 2023 07:57:10 -0700 Subject: [PATCH] feat: Allow the environment variable SNAKEMAKE_CONDA_PREFIX to be present without --use-conda (#2263) ### Description SNAKEMAKE_CONDA_PREFIX is a great tool for shared computing environments and I am encouraging everyone in our lab to set it in their `.bashrc` it to help with the number of conda builds we have and reduce file usage. However, there is one downside and that is it becomes impossible to run a non conda snakemake without clearing the environment variable because the lack of `--use-conda` will force snakemake to exit. In this PR I suggest a quality of life improvement. Instead of having snakemake error out, it will instead warn that the environment variable is set but conda environments will not be used or built because `--use-conda` is not set. Note, this will only happen when the environment variable is set and not when it is passed as a command line argument. Thanks for considering! ### QC * [x] The PR contains a test case for the changes or the changes are already covered by an existing test case. * [x] The documentation (`docs/`) is updated to reflect the changes or this is not necessary (e.g. if the change does neither modify the language nor the behavior or functionalities of Snakemake). --- snakemake/__init__.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/snakemake/__init__.py b/snakemake/__init__.py index e0cd920ac..0e13ab11d 100644 --- a/snakemake/__init__.py +++ b/snakemake/__init__.py @@ -2764,12 +2764,22 @@ def adjust_path(f): sys.exit(1) if (args.conda_prefix or args.conda_create_envs_only) and not args.use_conda: - print( - "Error: --use-conda must be set if --conda-prefix or " - "--create-envs-only is set.", - file=sys.stderr, - ) - sys.exit(1) + if args.conda_prefix and os.environ.get("SNAKEMAKE_CONDA_PREFIX", False): + print( + "Warning: The enviorment variable SNAKEMAKE_CONDA_PREFIX is set" + "but --use-conda is not." + "Snakemake will ignore SNAKEMAKE_CONDA_PREFIX" + "and conda enviorments will not be used or created.", + file=sys.stderr, + ) + args.conda_prefix = None + else: + print( + "Error: --use-conda must be set if --conda-prefix or " + "--create-envs-only is set.", + file=sys.stderr, + ) + sys.exit(1) if args.singularity_prefix and not args.use_singularity: print(