Home > front end >  Why does `python` point to my system's default python interpreter, instead of my `pyenv` python
Why does `python` point to my system's default python interpreter, instead of my `pyenv` python

Time:03-06

python points to my system's default python interpreter, instead of my pyenv python interpreter.

I created the python virtual environment and activated it as follows:

pyenv virtualenv 3.8.12 test3
pyenv activate test3

Then, running python gives me a python 3.7 interpreter (which is my system's default python interpreter), instead of 3.8.12. Why?


Full command outputs:

root@server:/home/code-base/f# pyenv virtualenv 3.8.12 test3
Looking in links: /tmp/tmp1yp95sav
Requirement already satisfied: setuptools in /root/.pyenv/versions/3.8.12/envs/test3/lib/python3.8/site-packages (56.0.0)
Requirement already satisfied: pip in /root/.pyenv/versions/3.8.12/envs/test3/lib/python3.8/site-packages (21.1.1)

root@server:/home/code-base/f# pyenv activate test3
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.

(test3) root@server:/home/code-base/f# python
Python 3.7.11 (default, Jul 27 2021, 14:32:16)
[GCC 7.5.0] :: Anaconda, Inc. on linux

Additionally:

  • pyenv which python returns /root/.pyenv/versions/test3/bin/python
  • command -v python returns /opt/conda/bin/python
  • $PATH inside my virtualenv: /root/.pyenv/plugins/pyenv-virtualenv/shims:/root/.pyenv/bin:/opt/conda/bin:/app/python/bin:/opt/conda/bin:/usr/local/mpi/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.local/bin
  • ls -la /root/.pyenv/plugins/pyenv-virtualenv/shims contains two folders: activate and deactivate.

CodePudding user response:

Given the new informations you gave us it is most likely that your a missing a eval "$(pyenv init --path)" in your ~/.profile (or in your Dockerfile as you are using K8s) as /root/.pyenv/shim is not part of $PATH.

Old answer:

Two possible solutions here:

Either you did not select your 3.8.12 binary as a system default via:

$ pyenv global 3.8.12
$ python -V
Python 3.8.12

$ pyenv versions
  system
  2.7.15
* 3.8.12 (set by /home/realpython/.pyenv/version)

or /opt/conda/bin/ has a higher priority in your $PATH then your pyenv installation.

CodePudding user response:

  1. If your ~/.profile sources ~/.bashrc (Debian, Ubuntu, Mint):
sed -Ei -e '/^([^#]|$)/ {a \
export PYENV_ROOT="$HOME/.pyenv"
a \
export PATH="$PYENV_ROOT/bin:$PATH"
a \
' -e ':a' -e '$!{n;ba};}' ~/.profile
echo 'eval "$(pyenv init --path)"' >>~/.profile

echo 'eval "$(pyenv init -)"' >> ~/.bashrc

Restart your login session for the changes to profile files to take effect. E.g. if you're in a GUI session, you need to fully log out and log back in.

  1. Install version of python you need.
pyenv install 3.8.12
  1. Activate it on your application directory
pyenv local 3.8.12
  1. Then locate python version
$ pyenv which python
/home/xirehat/.pyenv/versions/3.8.12/bin/python

CodePudding user response:

Once you've created your virtual environment you need to activate it. There's a shell script in the virtual environment's bin directory which you need to source.

For example, my default shell is zsh (on macOS) and in my .zshrc I have the following line:

source "/Volumes/G-DRIVE Thunderbolt 3/PythonStuff/venv3.10.2/bin/activate"

Thus the python executable that will be used in any zsh instance will be based on the venv.

Obviously your path to the venv will be different but you get the point.

  • Related