介绍
参考:
http://vincentsfootprint.com/post/venv_virtualenv_pipenv_difference
https://www.xncoding.com/2016/05/09/python/pyenv.html
virtualenv
是一个非常流行的用于创建独立的python libraries环境的工具。我强烈推荐你学习并了解它,因为他非常实用,并且应用广泛,很多人用它来搭建python开发环境。后面其他工具来主要与virtualenv来进行比较以说明差异。
virtualenv 通过安装一些列的可执行和库文件到某个目录(例如:env/),然后通过修改环境变量PATH中可执行文件(bin目录)目录的先后顺序来实现其功能,比如将 env/bin/ 放到环境变量PATH的前面。然后将一个 python或python3的可执行文件放到 env/bin/目录下,由于python运行时,会优先搜索与其路径接近的相对目录位置,这样就可达成优先使用virtualenv创建的libraries目录的目的,运行activated进入virtualenv环境后,就可以通过pip安装libraries到env/环境下
pyenv
管理 python 版本,用于创建独立的python版本环境。
pyenv是针对python版本的管理,通过修改环境变量的方式实现,在其官网说明上很清楚, 通过在PATH最前面插入shims来决定应用使用的python版本,从而将你的命令传递给正确的python程序。
例如,有可能你想要分别测试你的代码在 python2.6、2.7、3.3、3.4、3.5版本下的运行情况,那么你就需要类似pyenv这样的工具来快速切换python版本。一旦激活pyenv环境,它就将 ~/.pyenv/shims中的值放到环境变量PATH的前面,用于覆盖默认的python、pip可执行文件目录。它不会copy可执行文件,它仅仅是通过一些脚本代码基于 PYENV_VERSION或.python-version文件 来决定使用哪个python可执行文件运行python程序。另外,也可以通过 pyenv install 来安装多个python版本。
pyenv-virtualenv
pyenv作者为pyenv写的一个插件,通过该插件可以让你方便的同时使用pyenv和virtualenv。另外,如果你使用的是python3.3及以上的版本,它会尝试使用venv而不是virtualenv。当然,其实你也可以自己配置同时使用pyenv和virtualenv,而不直接使用pyenv-virtualenv。
virtualenvwrapper
是virtualenv的一些列扩展,它提供了诸如 mkvirtualenv, lssitepackages 等命令行工具,特别是 workon 命令行工具,当你需要使用多个virtualenv目录时使用该工具特别方便。
pyenv-virtualenvwrapper
pyenv作者为pyenv写的另外一个插件,可方便集成virtualenvwrapper到pyenv。
pipenv
requests 库的作者 Kenneth Reitz 编写的一个工具,目标是合并 Pipfile、pip、virtualenv 到同一个命令行工具中,实际使用中类似nodejs的依赖包管理工具npm。
1. 安装pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
2. 安装pyenv
参考:https://github.com/pyenv/pyenv/blob/master/README.md#installation
2.1 安装依赖:
yum -y install wget gcc epel-release git
yum -y install bzip2-devel bzip2-libs
yum -y install openssl openssl-devel openssl-static
yum -y install sqlite-devel
yum -y install readline readline-devel readline-static
2.2 安装pyenv:
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
写入配置到环境变量:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
重启shell,让配置生效:
exec "$SHELL"
验证pyenv是否正确安装以及获取pyenv的帮助信息:
pyenv --help
常用命令:
pyenv versions # 查看系统当前安装的python列表
pyenv version # 查看系统当前使用的python版本
pyenv install -v 3.5.3 # 安装python
pyenv uninstall 2.7.13 # 卸载python
pyenv rehash # 为所有已安装的可执行文件(如:~/.pyenv/versions/bin/)创建shims, 因此每当你增删了Python版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令)
2.3 安装一个 Python 版本,到 $PYENV_ROOT/versions 路径下:
pyenv install -l # 查看可安装的版本
pyenv install -v 3.6.1
pyenv rehash
报错 1:环境变量未生效
bash: pyenv: 未找到命令
解决:
source ~/.bash_profile
报错 2:缺失依赖
例如:WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
解决:
安装相关依赖即可
重新执行安装语句...
卸载指定版本:
pyenv uninstall 3.6.1
查看当前 pyenv 可检测到的所有已安装的版本,处于激活状态的版本前以 * 标示:
[root@usceth-eth-1 AAA]# pyenv versions
* system (set by /root/.pyenv/version)
3.6.1
2.4 切换环境
创建新的python环境,位于 ~/.pyenv/versions/
pyenv virtualenv 3.6.1 env361
激活环境:
pyenv activate env361
退出环境:
pyenv deactivate
删除环境:
$ rm -rf ~/.pyenv/versions/env361/
2.5 版本切换
pyenv global 3.5.3 # 设置全局的Python版本,通过将版本号写入~/.pyenv/version文件的方式
pyenv local 2.7.13 # 设置面向程序的本地版本,通过将版本号写入当前目录下的.python-version文件的方式。 通过这种方式设置的Python版本优先级较global高。
pyenv shell 2.7.13 # 设置面向shell的Python版本,通过设置当前shell的PYENV_VERSION环境变量的方式
优先级: shell > local > global
2.6 卸载pyenv
禁用pyenv很简单,只需要在~/.bash_profile中的pyenv init那行删了即可。
完全移除pyenv,先执行上面第1步,然后删了pyenv的根目录: rm -rf $(pyenv root)
3. 插件pyenv-virtualenv
参考:https://github.com/pyenv/pyenv-virtualenv
使用pyenv来管理多版本的python命令,使用pyenv-virtualenv插件来管理多版本python包环境。
3.1 安装:
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
重启shell命令:
exec "$SHELL"
如果eval "$(pyenv virtualenv-init -)"写在你的shell配置中(比如上面的~/.bash_profile), 那么当pyenv-virtualenv进入/离开某个含有.python-version目录时会自动激活/退出虚拟环境。
3.2 常用命令:
创建虚拟环境: pyenv virtualenv 2.7.13 virtual-env-2.7.13,默认使用当前环境python版本。 在文件夹$(pyenv root)/versions/my-virtual-env-2.7.13中创建一个基于Python 2.7.13的虚拟环境。
列出虚拟环境: pyenv virtualenvs,对每个virtualenv显示2个, 短的只是个链接,那个*表示当前激活的。
激活虚拟环境: pyenv activate virtual-env-2.7.13
退出虚拟环境: pyenv deactivate
删除虚拟环境: pyenv uninstall virtual-env-2.7.13
3.3 场景使用流程:
# 查看激活的Python版本
pyenv versions
查看现在有的虚拟环境
[root@tingyun_server opt]# pyenv virtualenvs
3.6.1/envs/venv36 (created from /root/.pyenv/versions/3.6.1)
venv36 (created from /root/.pyenv/versions/3.6.1)
# 先创建一个虚拟环境
pyenv virtualenv 3.6.1 virtual-env-3.6.1
# 进入某个目录比如/opt/demo,设置local python 环境
pyenv local virtual-env-3.6.1
# 然后再不需要去手动激活了