pyenv / pyenv-virtualenv

a pyenv plugin to manage virtualenv (a.k.a. python-virtualenv)
MIT License
6.18k stars 399 forks source link

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

Open Vanav opened 1 year ago

Vanav commented 1 year ago

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.