Python多版本管理

背景
使用python的同学肯定遇到过以下这些情况:
1)系统自带的Python是2.x,自己需要Python 3.x,测试尝鲜;
2)系统是2.6.x,开发环境是2.7.x
3)由于Mac机器系统保护的原因,默认的Python中无法对PIP一些包升级,需要组建新的Python环境
4)此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pyenv就是这样一个Python版本管理器。

#查看当前python版本
python -V

0 软件简介

pyenv 是一款特别好用的Python版本管理器,程序员可以建立不同的目录,在不同的目录里分别运行不同版本的Python, 并且互不影响,安装的包也互不影响。github项目地址:https://github.com/yyuu/pyenv

pyenv-virtualenv 是pyenv的一个plugin(插件),可以用来创建基于不同Python版本的干净的虚拟环境。github项目地址:https://github.com/yyuu/pyenv-virtualenv

1 安装篇

提示,如果还没有安装homebrew的同学可以先前往安装:homebrew
1、安装pyenv,安装完成后可以看console提示是否还需执行一些其他的命令

brew install pyenv

2、安装pyenv-virtualenv

brew install pyenv-virtualenv

按照安装完后Caveats的提示要添加两条环境变量到~/.bash_profile文件里:

if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi

需要使环境变量生效,运行命令exec "$SHELL",如果还没有效果,就退出终端,重新打开。

2 使用篇

2.1 pyenv使用

1、安装完成后可以查看pyenv的版本及其支持的指令:

fh:~ fenghuoMac$ pyenv
pyenv 1.1.3
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

2、查看当前系统激活使用的python版本

fh:~ fenghuoMac$ pyenv version
system (set by /Users/fenghuoMac/.pyenv/version)

3、查看当前机器已经安装了哪些python版本,比如可以看到楼主除了系统的python库还单独安装了2.7.13版本,*表示当前使用的什么版本

fh:~ fenghuoMac$ pyenv versions
* system (set by /Users/fenghuoMac/.pyenv/version)
  2.7.13

4、安装指定的python版本

#查看python版本列表
pyenv install --list

#安装3.5.0版本
pyenv install -v 3.5.0

# 卸载
pyenv uninstall 3.5.0

#安装/卸载完成后必须rehash database
pyenv rehash

这里要提到一点是,安装过程中楼主遇到了以下错误,然后搜到解决办法如下:

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

Please consult to the Wiki page to fix the problem.
https://github.com/pyenv/pyenv/wiki/Common-build-problems


BUILD FAILED (OS X 10.13.1 using python-build 20160602)
CFLAGS="-I$(brew --prefix openssl)/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install 3.4.2

5、切换python版本

#系统全局用系统默认的Python比较好,不建议直接对其操作
#设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。
pyenv global system
# 设置面向程序的本地版本,通过将版本号写入当前目录下的 .python-version 文件的方式。
# 通过这种方式设置的 Python 版本优先级较 global 高。pyenv 会从当前目录开始向上逐级查找 .python-version 文件,直到根目录为止。
#若找不到,就用 global 版本。
pyenv local 2.7.10
# 设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。
# 这个版本的优先级比 local 和 global 都要高。--unset 参数可以用于取消当前 shell 设定的版本。
pyenv shell 3.5.0

#取消某版本切换
pyenv shell --unset

优先级关系:shell——local——global

2.2 pyenv-virtualenv使用

# 创建新的环境,位于 ~/.pyenv/versions/
$ pyenv virtualenv 2.7.1 env271

# 切换到新的环境
$ pyenv activate env271

# 退回到系统环境
$ pyenv deactivate

# 删除新创建的环境
$ rm -rf ~/.pyenv/versions/env271/

pyenv-virtualenv是用来创建一个干净的虚拟Python环境的命令,通常在创建干净的新项目时候使用。使用方法如下:

1.创建虚拟环境--pyenv virtualenv 版本号 虚拟环境名。

$ pyenv virtualenv 3.5.1 venv-3.5.1

创建项目,让项目使用干净的Python3.5.1的虚拟环境:

$ mkdir myproject
$ cd myproject
$ pyenv local venv-3.5.1
pyenv-virtualenv: source deactivate
pyenv-virtualenv: source activate venv-3.5.1

此后,我们就会发现:只要我们进入myproject目录,就会自动激活virtualenv,退出myproject目录,就会关闭virtualenv。

如果要关闭自动激活,可以运行命令pyenv deactivate,要重新启用的话,运行pyenv activate 虚拟环境名
2、查看当前虚拟环境列表

pyenv virtualenvs
3.5.1/envs/venv-3.5.1 (created from /usr/local/var/pyenv/versions/3.5.1)
* venv-3.5.1 (created from /usr/local/var/pyenv/versions/3.5.1)

3、删除某虚拟环境

pyenv uninstall 虚拟环境名

参考资料

Python多版本管理器pyenv和虚拟环境pyenv-virtualenv的安装设置
如何在pycharm中使用配置好的virtualenv环境

推荐阅读更多精彩内容