Monday, April 18, 2022

[SOLVED] pyenv global x.x.x does not update the python version on linux

Issue

I have pyenv installed and have downloaded python versions 3.6.15 and 3.7.12. When I run

pyenv global 3.7.12
python -V

the output is: Python 3.10.2

pyenv versions gives the output

system
3.6.15
* 3.7.12 (set by /home/frege/.pyenv/version)

$ echo $PYENV_ROOT: /home/frege/.pyenv

$ which python: /user/bin/python

$ type python: python is hashed (/usr/bin/python)

I have the following in my .bashrc

export PATH="${HOME}/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

I have restarted my terminal and $PATH contains

/home/frege/.pyenv/plugins/pyenv-virtualenv/shims:
/home/frege/.pyenv/bin:
...
/usr/bin:

What is wrong?


Solution

I understand that getting pyenv and virtualenvs to work together can be problematic. I came from virtualenvwrapper which makes working on virtual envs simple and I found pyenv a bit of a culture shock.

I have finally got my workflow sorted and I thought I would post it here as it might help someone. My OS is Manjaro.

I installed pyenv:

curl https://pyenv.run | bash

The following was added to .bashrc:

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/shims:${PATH}"
export PATH="$PYENV_ROOT/bin:$PATH"
export PYENV_VIRTUALENVWRAPPER_PREFER_PYVENV="true"
export WORKON_HOME=$HOME/.virtualenvs
eval "$(pyenv init -)"
pyenv virtualenvwrapper_lazy

(I have not seen the line export PATH="$PYENV_ROOT/shims:${PATH}" in many explanations, but it is critical in mine.)

To invoke a global version of python:

pyenv shell <version>

or

pyenv shell system

To create a virtual env:

pyenv virtualenv <version> <env name>

To activate the virtual environment:

pyenv activate <env name>

To deactivate the virtual environment:

source deactivate 


Answered By - Psionman
Answer Checked By - David Goodson (WPSolving Volunteer)