pyenv-virtualenv icon indicating copy to clipboard operation
pyenv-virtualenv copied to clipboard

Force creating venv with same name doesn't update Python version

Open Vanav opened this issue 2 years ago • 0 comments

If venv already exists for Python version A, and we are force creating venv with the same name for Python version B, then Python version for venv is not updated: venv symlink is not changed, but new symlink is created inside venv directory.

Bug fix:

  ln -fs "${VIRTUALENV_PATH}" "${COMPAT_VIRTUALENV_PATH}"
→
  ln -fsn "${VIRTUALENV_PATH}" "${COMPAT_VIRTUALENV_PATH}"

https://github.com/pyenv/pyenv-virtualenv/blob/fca12418ca716cadc39ae498571bd6634ca3075e/bin/pyenv-virtualenv#L594

How to reproduce:

$ pyenv virtualenv --force 3.9.6 dev

$ ls -al /opt/pyenv-installer/pyenv/versions/3.9.6/envs/dev
drwxrwsr-x 6 deployer deployer 4096 Mar 30 12:09 .
drwxrwsr-x 3 deployer deployer 4096 Jul  5  2021 ..
drwxrwsr-x 3 deployer deployer 4096 Mar 15 11:01 bin
drwxrwsr-x 2 deployer deployer 4096 Jul  5  2021 include
drwxrwsr-x 3 deployer deployer 4096 Jul  5  2021 lib
lrwxrwxrwx 1 deployer deployer    3 Jul  5  2021 lib64 -> lib
-rw-rw-r-- 1 deployer deployer  106 Mar 30 11:02 pyvenv.cfg
drwxrwsr-x 3 deployer deployer 4096 Feb 17 12:46 share

$ pyenv virtualenvs | grep -i dev
  3.9.6/envs/dev (created from /opt/pyenv-installer/pyenv/versions/3.9.6)
* dev (created from /opt/pyenv-installer/pyenv/versions/3.9.6)

$ pyenv virtualenv --force 3.9.7 dev

Command executed:
ln -fs /opt/pyenv-installer/pyenv/versions/3.9.7/envs/dev /opt/pyenv-installer/pyenv/versions/dev

$ pyenv virtualenvs | grep -i dev
  3.9.6/envs/dev (created from /opt/pyenv-installer/pyenv/versions/3.9.6)
  3.9.7/envs/dev (created from /opt/pyenv-installer/pyenv/versions/3.9.7)
* dev (created from /opt/pyenv-installer/pyenv/versions/3.9.6)

$ ls -al /opt/pyenv-installer/pyenv/versions/3.9.6/envs/dev
drwxrwsr-x 6 deployer deployer 4096 Mar 30 12:09 .
drwxrwsr-x 3 deployer deployer 4096 Jul  5  2021 ..
drwxrwsr-x 3 deployer deployer 4096 Mar 15 11:01 bin
drwxrwsr-x 2 deployer deployer 4096 Jul  5  2021 include
lrwxrwxrwx 1 root     deployer   57 Mar 30 12:09 dev -> /opt/pyenv-installer/pyenv/versions/3.9.7/envs/dev
drwxrwsr-x 3 deployer deployer 4096 Jul  5  2021 lib
lrwxrwxrwx 1 deployer deployer    3 Jul  5  2021 lib64 -> lib
-rw-rw-r-- 1 deployer deployer  106 Mar 30 11:02 pyvenv.cfg
drwxrwsr-x 3 deployer deployer 4096 Feb 17 12:46 share

Notice new symlink in incorrect place.

Vanav avatar Mar 30 '23 09:03 Vanav