1. 概述
pyenv是用于多版本python之前切换。
virtualenv 用于创建隔离的“虚拟” python环境的工具。
virtualenv 是一个用来创建完全隔离的 Python 虚拟环境的工具,可以为每个项目工程创建一套独立的 Python 环境,从而可以解决不同工程对 Python 包,或者版本的依赖问题。假如有 A 和 B 两个工程,A 工程代码要跑起来需要 requests 1.18.4,而 B 工程跑起来需要 requests 2.18.4,这样在一个系统中就无法满足两个工程同时运行问题了。最好的解决办法是用 virtualenv 给每个工程创建一个完全隔离的 Python 虚拟环境,给每个虚拟环境安装相应版本的包,让程序使用对应的虚拟环境运行即可。这样既不影响系统 Python 环境,也能保证任何版本的 Python 程序可以在同一系统中运行。
一种可行的解决方案是,对virtualenv进一步封装,将所有的虚拟环境目录全都集中起来,比如放到 ~/virtualenvs/,并对不同的虚拟环境使用不同的目录来管理。
最佳实践:使用 pyenv 安装任何版本的 Python,然后用 virtualenvwrapper 创建虚拟环境时指定需要的 Python 版本路径,这样就可以创建任何版本的虚拟环境.
2. pyenv
2.1 安装
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
2.2 设置环境变量
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
2.3 添加pyenv init到bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
2.4 使能shell
exec "$SHELL"
2.5 用法
2.5.1 查询
pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.5.0
2.5.1
2.5.2
2.5.3
2.5.4
2.5.5
2.5.6
2.6.6
2.6.7
2.6.8
2.6.9
2.7.0
2.7-dev
2.7.1
2.7.2
2.7.3
2.7.4
2.7.5
2.7.6
2.7.7
2.7.8
2.7.9
2.7.10
2.7.11
2.7.12
2.7.13
2.7.14
2.7.15
2.7.16
2.7.17
3.0.1
3.1.0
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
3.2.0
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
3.3.0
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
3.3.7
3.4.0
3.4-dev
3.4.1
3.4.2
3.4.3
3.4.4
3.4.5
3.4.6
3.4.7
3.4.8
3.4.9
3.4.10
3.5.0
3.5-dev
3.5.1
3.5.2
3.5.3
3.5.4
3.5.5
3.5.6
3.5.7
3.5.8
3.5.9
3.6.0
3.6-dev
3.6.1
3.6.2
3.6.3
3.6.4
3.6.5
3.6.6
3.6.7
3.6.8
3.6.9
3.7.0
3.7-dev
3.7.1
3.7.2
3.7.3
3.7.4
3.7.5
3.7.5rc1
3.8.0
3.8-dev
3.9-dev
2.5.2安装
pyenv install -v 3.7.5
pyenv install -v 2.7.16
说明:3.8.0装virtualenvwrapper会有问题,所以安装3.7.5。
2.5.3 切换
tom@tom-linuxer:~/work/flask-all$ pyenv global 3.8.0
tom@tom-linuxer:~/work/flask-all$ pyenv versions
system
2.7.16
* 3.8.0 (set by /home/tom/.pyenv/version)
通过pyenv global切换python版本。
3. virtualenvwrapper
3.1 安装
pip install virtualenvwrapper
3.2配置
# Add virtualenvwrapper path
export WORKON_HOME=~/work/virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/home/tom/.pyenv/versions/3.7.5/bin/python
source /home/tom/.pyenv/versions/3.7.5/bin/virtualenvwrapper.sh
说明:
tom@tom-linuxer:~/work/virtualenvs/upgrade-platform$ which virtualenvwrapper.sh
/home/tom/.pyenv/shims/virtualenvwrapper.sh
配置成/home/tom/.pyenv/shims/virtualenvwrapper.sh这个路径,总是报错。
使用
lsvirtualenv: 列出所有虚拟环境
tom@tom-linuxer:~$ lsvirtualenv
upgrade-platform
================
workon: 激活/切换 虚拟环境
tom@tom-linuxer:~$ workon upgrade-platform
(upgrade-platform) tom@tom-linuxer:~$ pwd
/home/tom
cdvirtualenv: 进入虚拟环境目录
(upgrade-platform) tom@tom-linuxer:~$ cdvirtualenv
(upgrade-platform) tom@tom-linuxer:~/work/virtualenvs/upgrade-platform$
deactivate: 停止虚拟环境
(upgrade-platform) tom@tom-linuxer:~/work/virtualenvs/upgrade-platform$ deactivate
tom@tom-linuxer:~/work/virtualenvs/upgrade-platform$
rmvirtualenv xxx:删除xx环境
安装错误
tom@tom-linuxer:~$ pip install virutalenv virtualenvwrapper
Collecting virutalenv
ERROR: Could not find a version that satisfies the requirement virutalenv (from versions: none)
ERROR: No matching distribution found for virutalenv
说明:基本上是网络错误。