Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows cmd.exe: installing a package changes activation and deactivation behavior #13850

Open
2 tasks done
marcoesters opened this issue Apr 24, 2024 · 0 comments
Open
2 tasks done
Labels
cli::cmd pertains to the CLI in CMD os::windows relevant to Windows plugins::activate pertains to conda-activate or conda-deactivate source::anaconda created by members of Anaconda, Inc. type::bug describes erroneous operation, use severity::* to classify the type

Comments

@marcoesters
Copy link
Contributor

marcoesters commented Apr 24, 2024

Checklist

  • I added a descriptive title
  • I searched open reports and couldn't find a duplicate

What happened?

Overview

Using cmd.exe, the activation and deactivation behavior is inconsistent between environments with and without packages installed.

  • When deactivating an environment that has a package installed, the command-line prefix is the path to the base environment. For empty environments, it is (base).
  • Activating the base environment from within an environment with a package installed appears to make that environment the base environment. For empty environments, the base environment is activated instead.

Activation methods impacted

The behavior is observed with the activation methods of conda:

  • Scripts\activate.bat <prefix> (with and without <prefix>)
  • condabin\activate.bat <prefix> (with and without <prefix>)
  • condabin\conda_hook.bat <prefix> && conda activate (with and without <prefix>)

It does not happen with the PowerShell hook.

Observed behavior

Creating an empty environment, activating, and deactivating it should change the command line prefix from (base) to (<environment name>) to (base):

C:\Users\MarcoEsters>miniconda3_test\Scripts\activate.bat C:\Users\MarcoEsters\miniconda3_test

(base) C:\Users\MarcoEsters>conda create -y -n testenv_install && conda activate testenv_install

<omitting output for brevity>

(testenv_install) C:\Users\MarcoEsters>conda deactivate

(base) C:\Users\MarcoEsters>conda info --env
# conda environments:
#
base                  *  C:\Users\MarcoEsters\miniconda3_test
testenv_install          C:\Users\MarcoEsters\miniconda3_test\envs\testenv_install

When installing a package, however, the command line prefix after deactivation is the path to the base environment:

(base) C:\Users\MarcoEsters>conda activate testenv_install

(testenv_install) C:\Users\MarcoEsters>conda install -y constructor

<output omitted for brevity>

(testenv_install) C:\Users\MarcoEsters>conda deactivate

(C:\Users\MarcoEsters\miniconda3_test) C:\Users\MarcoEsters>conda info --env
# conda environments:
#
base                  *  C:\Users\MarcoEsters\miniconda3_test
testenv_install          C:\Users\MarcoEsters\miniconda3_test\envs\testenv_install

(C:\Users\MarcoEsters\miniconda3_test) C:\Users\MarcoEsters>conda deactivate

C:\Users\MarcoEsters>

This is irreversible - activating and deactivating from there on out results in the path of the base environment being used instead of (base):

C:\Users\MarcoEsters>miniconda3_test\Scripts\activate.bat C:\Users\MarcoEsters\miniconda3_test

(base) C:\Users\MarcoEsters>conda activate testenv_install

(testenv_install) C:\Users\MarcoEsters>conda deactivate

(C:\Users\MarcoEsters\miniconda3_test) C:\Users\MarcoEsters>

Activating the base environment from within this environment appears to make the new environment the base environment.

This behavior is a little less reproducible, i.e., I have seen some instances where the base environment is activated, but I have not been able to isolate these circumstances.

C:\Users\MarcoEsters>miniconda3_test\Scripts\activate.bat C:\Users\MarcoEsters\miniconda3_test

(base) C:\Users\MarcoEsters>conda activate testenv_install

(testenv_install) C:\Users\MarcoEsters>conda activate base

(testenv_install) C:\Users\MarcoEsters>conda info --env
# conda environments:
#
                         C:\Users\MarcoEsters\miniconda3_test
base                  *  C:\Users\MarcoEsters\miniconda3_test\envs\testenv_install

(testenv_install) C:\Users\MarcoEsters>conda deactivate

(C:\Users\MarcoEsters\miniconda3_test) C:\Users\MarcoEsters>conda deactivate

C:\Users\MarcoEsters>

Behavior of empty environments

Empty environments are not impacted, even if created afterwards:

C:\Users\MarcoEsters>miniconda3_test\Scripts\activate.bat C:\Users\MarcoEsters\miniconda3_test

(base) C:\Users\MarcoEsters>conda create -y -n testenv_empty && conda activate testenv_empty

<omitting output for brevity>

(testenv_empty) C:\Users\MarcoEsters>conda deactivate

(base) C:\Users\MarcoEsters>conda activate testenv_empty

(testenv_empty) C:\Users\MarcoEsters>conda activate base

(base) C:\Users\MarcoEsters>conda info --env
# conda environments:
#
base                  *  C:\Users\MarcoEsters\miniconda3_test
testenv_empty            C:\Users\MarcoEsters\miniconda3_test\envs\testenv_empty
testenv_install          C:\Users\MarcoEsters\miniconda3_test\envs\testenv_install

(base) C:\Users\MarcoEsters>conda deactivate

(testenv_empty) C:\Users\MarcoEsters>conda deactivate

(base) C:\Users\MarcoEsters>conda deactivate

C:\Users\MarcoEsters>

Conda Info

active environment : base
    active env location : C:\Users\MarcoEsters\miniconda3_test
            shell level : 1
       user config file : C:\Users\MarcoEsters\.condarc
 populated config files : C:\Users\MarcoEsters\.condarc
          conda version : 24.3.0
    conda-build version : not installed
         python version : 3.12.2.final.0
                 solver : libmamba (default)
       virtual packages : __archspec=1=x86_64_v3
                          __conda=24.3.0=0
                          __win=0=0
       base environment : C:\Users\MarcoEsters\miniconda3_test  (writable)
      conda av data dir : C:\Users\MarcoEsters\miniconda3_test\etc\conda
  conda av metadata url : None
           channel URLs : https://repo.anaconda.com/pkgs/main/win-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/win-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-64
                          https://repo.anaconda.com/pkgs/msys2/noarch
          package cache : C:\Users\MarcoEsters\miniconda3_test\pkgs
                          C:\Users\MarcoEsters\.conda\pkgs
                          C:\Users\MarcoEsters\AppData\Local\conda\conda\pkgs
       envs directories : C:\Users\MarcoEsters\miniconda3_test\envs
                          C:\Users\MarcoEsters\.conda\envs
                          C:\Users\MarcoEsters\AppData\Local\conda\conda\envs
               platform : win-64
             user-agent : conda/24.3.0 requests/2.31.0 CPython/3.12.2 Windows/11 Windows/10.0.22631 solver/libmamba conda-libmamba-solver/24.1.0 libmambapy/1.5.8 aau/0.4.4 c/. s/. e/.
          administrator : False
             netrc file : None
           offline mode : False

Conda Config

==> C:\Users\MarcoEsters\.condarc <==
channels:
  - defaults

Conda list

# packages in environment at C:\Users\MarcoEsters\miniconda3_test:
#
# Name                    Version                   Build  Channel
anaconda-anon-usage       0.4.4           py312hfc23b7f_100    defaults
archspec                  0.2.3              pyhd3eb1b0_0    defaults
boltons                   23.0.0          py312haa95532_0    defaults
brotli-python             1.0.9           py312hd77b12b_7    defaults
bzip2                     1.0.8                h2bbff1b_5    defaults
ca-certificates           2024.3.11            haa95532_0    defaults
certifi                   2024.2.2        py312haa95532_0    defaults
cffi                      1.16.0          py312h2bbff1b_0    defaults
charset-normalizer        2.0.4              pyhd3eb1b0_0    defaults
colorama                  0.4.6           py312haa95532_0    defaults
conda                     24.3.0          py312haa95532_0    defaults
conda-content-trust       0.2.0           py312haa95532_0    defaults
conda-libmamba-solver     24.1.0             pyhd3eb1b0_0    defaults
conda-package-handling    2.2.0           py312haa95532_0    defaults
conda-package-streaming   0.9.0           py312haa95532_0    defaults
console_shortcut_miniconda 0.1.1                haa95532_1    defaults
cryptography              42.0.5          py312h89fc84f_0    defaults
distro                    1.8.0           py312haa95532_0    defaults
expat                     2.5.0                hd77b12b_0    defaults
fmt                       9.1.0                h6d14046_0    defaults
idna                      3.4             py312haa95532_0    defaults
jsonpatch                 1.33            py312haa95532_0    defaults
jsonpointer               2.1                pyhd3eb1b0_0    defaults
libarchive                3.6.2                hb62f4d4_2    defaults
libcurl                   8.5.0                h86230a5_0    defaults
libffi                    3.4.4                hd77b12b_0    defaults
libiconv                  1.16                 h2bbff1b_2    defaults
libmamba                  1.5.8                h99b1521_1    defaults
libmambapy                1.5.8           py312h77c03ed_1    defaults
libsolv                   0.7.24               h23ce68f_0    defaults
libssh2                   1.10.0               he2ea4bf_2    defaults
libxml2                   2.10.4               h0ad7f3c_1    defaults
lz4-c                     1.9.4                h2bbff1b_0    defaults
menuinst                  2.0.2           py312hd77b12b_0    defaults
openssl                   3.0.13               h2bbff1b_0    defaults
packaging                 23.2            py312haa95532_0    defaults
pcre2                     10.42                h0ff8eda_0    defaults
pip                       23.3.1          py312haa95532_0    defaults
platformdirs              3.10.0          py312haa95532_0    defaults
pluggy                    1.0.0           py312haa95532_1    defaults
powershell_shortcut_miniconda 0.0.1                haa95532_1    defaults
pybind11-abi              4                    hd3eb1b0_1    defaults
pycosat                   0.6.6           py312h2bbff1b_0    defaults
pycparser                 2.21               pyhd3eb1b0_0    defaults
pysocks                   1.7.1           py312haa95532_0    defaults
python                    3.12.2               h1d929f7_0    defaults
reproc                    14.2.4               hd77b12b_1    defaults
reproc-cpp                14.2.4               hd77b12b_1    defaults
requests                  2.31.0          py312haa95532_1    defaults
ruamel.yaml               0.17.21         py312h2bbff1b_0    defaults
setuptools                68.2.2          py312haa95532_0    defaults
sqlite                    3.41.2               h2bbff1b_0    defaults
tk                        8.6.12               h2bbff1b_0    defaults
tqdm                      4.65.0          py312hfc267ef_0    defaults
truststore                0.8.0           py312haa95532_0    defaults
tzdata                    2024a                h04d1e81_0    defaults
urllib3                   2.1.0           py312haa95532_1    defaults
vc                        14.2                 h21ff451_1    defaults
vs2015_runtime            14.27.29016          h5e58377_2    defaults
wheel                     0.41.2          py312haa95532_0    defaults
win_inet_pton             1.1.0           py312haa95532_0    defaults
xz                        5.4.6                h8cc25b3_0    defaults
yaml-cpp                  0.8.0                hd77b12b_0    defaults
zlib                      1.2.13               h8cc25b3_0    defaults
zstandard                 0.19.0          py312h2bbff1b_0    defaults
zstd                      1.5.5                hd43e919_0    defaults

Additional Context

I tested it only on Windows 11, but I don't see a reason why other Windows operating systems would behave differently.

I used a fresh Miniconda installation every time I tested a new activation method.

There is another Miniconda installation on the system (23.11.0), but I can reproduce the behavior there, too. I omitted those environments from the conda info --env output.

@marcoesters marcoesters added the type::bug describes erroneous operation, use severity::* to classify the type label Apr 24, 2024
@kenodegard kenodegard added os::windows relevant to Windows source::anaconda created by members of Anaconda, Inc. cli::cmd pertains to the CLI in CMD plugins::activate pertains to conda-activate or conda-deactivate labels Apr 24, 2024
@marcoesters marcoesters changed the title Windows cmd.exe: installating a package changes activation and deactivation behavior Windows cmd.exe: installing a package changes activation and deactivation behavior May 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cli::cmd pertains to the CLI in CMD os::windows relevant to Windows plugins::activate pertains to conda-activate or conda-deactivate source::anaconda created by members of Anaconda, Inc. type::bug describes erroneous operation, use severity::* to classify the type
Projects
Status: 🆕 New
Development

No branches or pull requests

2 participants