操作系统环境: Centos7.1 64位
1.Pyenv介绍
Pyenv用于同时管理多个python版本,它可为每个工作目录设定使用指定的python版本,例如切换到$HOME/first_project,其使用的python版本为2.7.9;而切换进入$HOME/second_project,其使用的python版本可自动变换为3.4.3。
Pyenv的git仓库:
https://github.com/yyuu/pyenv
2.pyenv环境安装
(1)安装git
yum install git
(2)pyenv命令在安装python时,是通过下载源代码后于本地编译进行,因此,需要本地部署好开发环境,并为其部署相关依赖到的程序包,如readline、readline-devel、openssl-devel、sqlite-devel和bzip2-devel等
yum groupinstall "Development Tools" yum install readline readline-devel openssl-devel sqlite-devel bzip2-devel
(2)clone pyenv代码到用户家目录
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
(3)为pyenv提供环境配置
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
(4)重启shell进程,以使得新配置生效
exec $SHELL
(5)验证pyenv环境的安装:手动执行一个pyenv命令,如果可以正常执行就认为pyenv安装没有问题
[root@Python ~]# pyenv --version pyenv 20160202-10-ga6f1f48
3.Pyenv使用
Pyenv有许多子命令,用于管理python环境。不带任何参数的pyenv命令可用于查看这些命令的列表及简单使用说明。如果想查看某命令的详细帮助信息,可使用类似如下格式的命令获取。
pyenv help
查看可安装的python版本列表:
pyenv install --list
安装python3.4.2
[root@Python ~]# pyenv install 3.4.2 Downloading Python-3.4.2.tgz... -> https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz Installing Python-3.4.2... patching file ./Lib/ssl.py patching file ./Modules/_ssl.c Installed Python-3.4.2 to /root/.pyenv/versions/3.4.2
安装完成之后需要在安装一个python2.7.9的版本,用于后面的环境配置
每次安装新版本后,建议使用rehash命令重新hash其可用的python清单
pyenv rehash
在一次查看可用的python版本列表,其中前面的*表示当前工作目录正在使用的版本,其中system表示系统自带的python版本
[root@Python ~]# pyenv versions * system (set by /root/.pyenv/version) 2.7.9 3.4.2
4.基于pyenv设定工作目录使用的python版本
Pyenv的global子命令可以查看及设定全局版本,而local子命令则用于设定及查看当前工作目录的本地版本,ersion子命令可用于查看当前正在使用的版本。
[root@Python ~]# pyenv global system [root@Python ~]# pyenv version system (set by /root/.pyenv/version)
假设这里有两个项目,路径分别为/root/firsh_project和/root/second_project,其中前一个使用python2.7.9,而后一个使用python3.4.2
创建两个项目的工作目录
mkdir /root/firsh_project /root/second_project
切换至第一个项目的目录,设定其使用python版本为2.7.9
[root@Python ~]# cd /root/firsh_project/ [root@Python firsh_project]# pyenv local #查看当前设定版本,这里显示没有设置 pyenv: no local version configured for this directory [root@Python firsh_project]# pyenv local 2.7.9 #设置当前版本为2.7.9 [root@Python firsh_project]# pyenv local #查看当前版本已经设置为2.7.9 2.7.9 [root@Python firsh_project]# python -V Python 2.7.9
切换到第二个目录,设定其使用python版本为3.4.2
[root@Python ~]# cd second_project/ [root@Python second_project]# pyenv local pyenv: no local version configured for this directory [root@Python second_project]# pyenv local 3.4.2 [root@Python second_project]# pyenv local 3.4.2 [root@Python second_project]# python -V Python 3.4.2
设定完成后,切换至此两个项目中的任何一个的目录,其依然会保持设定的版本。如果取消设定的版本,使用“pyenv local –unset”即可。
补充:最好不要使用pyenv global命令,因为此命令是设置全局的python版本,对所有目录生效(后果的话试试就知道了)
5.Pyenv的pyenv-virtualenv插件
pyenv irtualenv是pyenv的插件,为Unix系统上的python irtualenvs提供pyenv irtualenv命令。它可以为pyenv管理的python版本运行提供隔离的虚拟环境,在此虚拟环境下的操作例如安装第三方模块以及修改库搜索路径等,都不会在原始的python环境里直接操作,从而保证了各python版本本身的纯净。
第一步:安装pyenv-virtualenv插件
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
pyenv-virtualenv会为pyenv引入一些新命令,例如virtualenv/virtualenv-delete用户创建/删除虚拟环境,virtualenvs用于列出所有的虚拟环境,activate和deactivate用于激活/禁用已有虚拟环境,用于获取使用帮助:
[root@Python ~]# pyenv help virtualenv Usage: pyenv virtualenv [-f|--force] [VIRTUALENV_OPTIONS] [version] <virtualenv-name> pyenv virtualenv --version pyenv virtualenv --help -f/--force Install even if the version appears to be installed already
第二步:使用pyenv-virtualenv建立虚拟python环境
以/root/virtual_env目录为例,创建一个虚拟的python环境
mkdir /root/virtual_env
创建一个名为myenv的虚拟python环境,其使用“3.4.2的版本”。
[root@Python virtual_env]# pyenv virtualenv 3.4.2 myenv Ignoring indexes: https://pypi.python.org/simple/ Requirement already satisfied (use --upgrade to upgrade): setuptools in /root/.pyenv/versions/3.4.2/envs/myenv/lib/python3.4/site-packages Requirement already satisfied (use --upgrade to upgrade): pip in /root/.pyenv/versions/3.4.2/envs/myenv/lib/python3.4/site-packages Cleaning up...
查看可用python版本列表
[root@Python virtual_env]# pyenv versions * system (set by /root/.pyenv/version) 2.7.9 3.4.2 3.4.2/envs/myenv myenv
仅查看python的虚拟环境
[root@Python virtual_env]# pyenv virtualenvs 3.4.2/envs/myenv (created from /root/.pyenv/versions/3.4.2) myenv (created from /root/.pyenv/versions/3.4.2)
在当前工作目录激活虚拟环境myenv
[root@Python virtual_env]# pyenv activate myenv (myenv) [root@Python virtual_env]# python --version Python 3.4.2
查看可用pip及其版本
(myenv) [root@Python virtual_env]# pip -V pip 1.5.6 from /root/.pyenv/versions/3.4.2/envs/myenv/lib/python3.4/site-packages (python 3.4)
为当前虚拟环境使用pip命令安装一个第三方模块,例如pymysql和ipython
pip install pymysql pip install ipython
运行ipython,并尝试导入pymysql模块,如果能导入成功,则表示模块已然就绪;
(myenv) [root@Python virtual_env]# ipython Python 3.4.2 (default, Nov 23 2015, 13:14:16) Type "copyright", "credits" or "license" for more information. IPython 4.1.1 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: import pymysql In [2]:
另一个终端,切换至之前步骤中使用pyenv设定其使用3.4.2版本python的项目目录,firsh_project中,尝试运行ipython命令会失败。这说明此前虚拟环境myenv中的操作对其原始版本没有产生影响,是与之隔离的。
[root@Python firsh_project]# ipython pyenv: ipython: command not found The `ipython' command exists in these Python versions: 3.4.2/envs/myenv myenv