使用virtualenv使用不同版本的Python

使用virtualenv使用不同版本的Python

技术背景

在Python开发中,不同的项目可能依赖于不同版本的Python。为了避免版本冲突,我们可以使用虚拟环境来隔离项目的Python环境。virtualenv 是一个常用的工具,它可以创建独立的Python虚拟环境,并且可以指定使用的Python版本。

实现步骤

使用 virtualenv 指定Python版本

在创建 virtualenv 实例时,可以使用 --python(或简写 -p)选项来指定要使用的Python可执行文件,例如:

1
virtualenv --python="/usr/bin/python2.6" "/path/to/new/virtualenv/"

使用 venv 创建虚拟环境

从Python 3.3开始,可以使用标准库中的 venv 模块来创建虚拟环境:

1
python3 -m venv "my_env_name"

如果要使用特定版本的Python,例如Python 3.6,可以这样做:

1
python3.6 -m venv "my_env_name"

在共享主机环境中从源代码安装Python并创建 venv

以下是在共享主机环境中安装Python 2.7.9并创建虚拟环境的步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mkdir ~/src
wget http://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
tar -zxvf Python-2.7.9.tgz
cd Python-2.7.9
mkdir ~/.localpython
./configure --prefix=$HOME/.localpython
make
make install

# 创建虚拟环境
cd ~/src
wget https://pypi.python.org/packages/5c/79/5dae7494b9f5ed061cff9a8ab8d6e1f02db352f3facf907d9eb614fb80e9/virtualenv-15.0.2.tar.gz#md5=0ed59863994daf1292827ffdbba80a63
tar -zxvf virtualenv-15.0.2.tar.gz
cd virtualenv-15.0.2/
~/.localpython/bin/python setup.py install
virtualenv ve -p $HOME/.localpython/bin/python2.7
source ve/bin/activate

使用 pyenvvirtualenvwrapper

在macOS上,可以使用 pyenvvirtualenvwrapper 来管理Python版本和虚拟环境:

1
2
3
4
5
6
7
8
9
10
11
12
brew install pyenv
pyenv install 3.11.6
pyenv global 3.11.6

# 设置环境变量
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/django_projects
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python2.7
source /Library/Frameworks/Python.framework/Versions/2.7/bin/virtualenvwrapper.sh

# 创建虚拟环境
mkvirtualenv -p ~/.pyenv/versions/3.11.6/bin/python my_env

使用 conda 创建虚拟环境

conda 是一个强大的包管理和环境管理工具,可以用来创建不同Python版本的虚拟环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 搜索可用的Python版本
conda search "^python$"

# 创建Python 3.5.4的虚拟环境
conda create -n yourenvname python=3.5.4

# 激活虚拟环境
conda activate yourenvname

# 停用虚拟环境
conda deactivate

# 删除虚拟环境
conda remove -n yourenvname --all

核心代码

使用 virtualenv 指定Python版本

1
virtualenv --python=python3.8 env/place/you/want/to/save/to

使用 venv 创建虚拟环境

1
python3.8 -m venv env/place/you/want/to/save/to

使用 pyenvvenv 创建虚拟环境

1
2
3
4
pyenv install 3.7.3
pyenv local 3.7.3
python -m venv .
source bin/activate

最佳实践

  • 使用 pyenvpyenv-virtualenv:这是一种管理Python版本和虚拟环境的无缝体验,可以方便地切换不同的Python版本和创建虚拟环境。
  • 使用 PoetryPipenv:这些工具可以更好地管理项目的依赖和虚拟环境,替代传统的 virtualenvpip
  • 避免提交虚拟环境到版本控制系统:虚拟环境通常不需要提交到版本控制系统,可以将其添加到 .gitignore 文件中。

常见问题

别名问题

如果在 bash_aliases 中设置了Python的别名,该别名也会在虚拟环境中使用。例如:

1
python=python3.6

在这种情况下,即使使用不同的解释器创建虚拟环境,运行 python -V 也会输出 3.6

权限问题

在Windows上使用 virtualenv 时,如果不指定 python.exe,可能会遇到 WindowsError: [Error 5] Access is denied 错误。例如:

1
virtualenv --python=c:\Python25\python.exe envname

版本更新问题

如果虚拟环境中缺少某些Python版本的包,可以使用 --upgrade 选项更新虚拟环境:

1
python3.7 -m venv --upgrade /home/username/path/to/myvenv/