Home  >  Article  >  Backend Development  >  Let’s talk about how to switch Python versions at will

Let’s talk about how to switch Python versions at will

WBOY
WBOYforward
2023-04-13 18:58:071524browse

Preface

I don’t know if you have encountered such a situation in your daily development work:

  • Project A was developed using Python 2.7 version (maybe due to historical legacy The problem has not been upgraded or updated)
  • Project B was developed using Python version 3.10.4, assuming that requests==2.25.1 version was used
  • Project C was developed using Python version 3.10.4 Yes, assuming that requests==2.27.1 version is used

First of all, the first question: the problem of Python version. There is a big difference between Python 2.x and Python 3.x, and there are many versions. Not easy to manage.

The second question: Maybe the version of requests will not have any impact in project B and project C. But using different versions of the same package in some other project can have a huge impact. Then you need to differentiate the versions at this time, so the same Python version needs to use two versions of packages. Obviously package management is a problem in this scenario. It is very important to ensure that different package environments do not interfere with each other during daily project development. It is necessary and a basic need. Then the best way is two virtual environments.

So is there a final solution that can manage different versions of interpreters while also providing a function to control different package versions? Of course there is, it is pyenv.

1. What is pyenv?

pyenv is a Python environment management tool forked from the ruby ​​community. It can easily switch the global Python interpreter version, and it can be combined with virtualenv for convenient management. Bag. After installing pyenv, it will add environment variables to your $PATH, as follows:

❯ echo $PATH
/Users/allenjol/.pyenv/plugins/pyenv-virtualenv/shims:/Users/allenjol/.pyenv/shims:/usr/local/bin:/usr/local/sbin

So, pyenv actually controls your PATH environment variables to switch Python versions. It implements version control on Python by inserting a shims path at the beginning of the PATH path.

2. The relationship and difference between pyenv, virtualenv, and pipenv

As mentioned earlier, pyenv controls the Python version, virtualenv is a relatively mature Python virtual environment management tool, and pipenv is the requrests package A tool written by Kenneth Reitz as a package management tool for Python, it can also generate virtual environments. This article will not discuss this tool for now, but will introduce it in a later article.

Pyenv focuses on the management of Python interpreter versions. You can switch your Python version at will and do not need to specify a specific virtual environment directory.

3. Virtual environment pyenv

Installing pyenv under CentOS7

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

Installing pyenv under MacOS

brew update
brew install pyenv

If you cannot install it well under MacOS due to network reasons There are two solutions using brew:

  • Change the source
  • Refer to https://sre.ayunw.cn/posts/terminal_configure_proxy_with_clash/ to set the proxy

Set environment variables

# bash下设置环境变量
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

source ~/.bashrc

# zsh下设置环境变量(我是iterm2+zsh)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

source ~/.zshrc

View pyenv version

pyenv --version

4. How to use the command line

# 查看当前版本
pyenv version
# 查看所有版本
pyenv versions
# 查看有哪些版本可供安装
pyenv install --list
# 安装python 3.10.4版本
pyenv install 3.10.4
# 安装一个版本后rehash一下,让pyenv知道管理的Python版本信息
pyenv rehash

# 卸载
pyenv uninstall 3.10.4
# 查看所有版本
❯ pyenv versions
system
* 3.10.4 (set by /Users/allenjol/.pyenv/version)

# 切换全局的Python版本,表示切换为系统的Python版本
pyenv global system
# 表示切换为pyenv的3.10.4版本
pyenv global 3.10.4

5. Package management plug-in pyenv-virtualenv

Install pyenv-virtualenv

Installation under Linux

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
 
# 配置环境变量
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
source ~/.bash_profile

Installation under MacOS

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

# MacOS的zsh
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
exec "$SHELL"

# 方法二
brew install pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
exec "$SHELL"

Use pyenv-virtualenv

# 创建venv环境
pyenv virtualenv venv3.10.4
# 激活venv
pyenv activate venv3.10.4
pyenv version

# 退出venv环境
pyenv deactivate venv3.10.4

# 删除虚拟环境
pyenv uninstall venv3.10.4

When you switch to Python When using a virtual environment, your pip and the packages in your virtual environment are switched to your target environment. It has nothing to do with the original environment. So this way it gets good version isolation of the python interpreter environment and packages.

The above is the detailed content of Let’s talk about how to switch Python versions at will. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:51cto.com. If there is any infringement, please contact admin@php.cn delete