多版本管理-pyenv与环境自动加载工具-direnv
Pyenv
pyenv 用于同时管理多个python版本,它可以为每个工作目录设定使用指定的py版本,在不同目录下使用不同的版本可以同时开发不同版本的项目
一、安装
#依赖包安装 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y #安装pyenv包 git clone https://github.com/pyenv/pyenv.git ~/.pyenv #设置环境变量 #vim ~/.bashrc export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" #source ~/.bashrc #重启 exec $SHELL
二、使用方法
查看pyenv支持的python版本
pyenv install --list
查看当前pyenv可检测到的所有版本,处于激活状态的版本前以 * 标示
[root@localhost ~]# pyenv versions system 3.5.1 * 3.5.3 (set by /root/.pyenv/version) #system 代表当前系统的python 版本
查看当前处于激活状态的版本,括号中内容表示这个版本是由哪条途径激活的(global、local、shell)
[root@localhost ~]# pyenv version 3.5.3 (set by /root/.pyenv/version)
安装需要的python版本
pyenv install 3.4.0 -v #小技巧,可以在/root/.pyenv/目录下创建cache目录,将下载好的Python-3.4.0的包放在该目录下,就可以直接执行安装,而不需要下载,节省下载时间.
#安装后:pyenv rehash
卸载
pyenv uninstall 3.4.0
切换python版本
pyenv global 2.7.1 #全局进行切换到python 2.7.1版本 pyenv local 2.7.1 #只针对当前目录及其子目录切换python 2.7.1版本
三、利用virtualenv 创建虚拟python环境
pyenv通过插件,可以很好的和virtualenv一起工作,通过整合virtualenv,pyenv实现了真正意义上的环境隔离,每个项目都相当于使用一个单独的解释器。
安装Pyenv-virtualenv插件
git clone git://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
重新载入环境
exec $SHELL
Pyenv-virtualenv为pyenv引入了一些命令
#创建和删除虚拟环境 pyenv virtualenv pyenv virtualenv-delete #列出所有的虚拟环境 virtualenvs #激活或者警用虚拟环境 pyenv activate pyenv deactivate
创建一个3.6.0的虚拟环境,名为env360
pyenv virtualenv 3.6.0 env360
这条命令在本机上创建了一个名为env360的python虚拟环境,这个环境的真实目录位于:~/.pyenv/versions/
注意,命令中的 ‘3.6.0’ 必须是一个安装前面步骤已经安装好的python版本, 否则会出错。
然后我们可以继续通过 ‘pyenv versions’ 命令来查看当前的虚拟环境
四、官网提供的一些命令
就像git,该pyenv命令根据其第一个参数委托给子命令。
常见的子命令如下
pyenv commands
列出所有可用的pyenv命令
pyenv local
通过将版本名称写入.python-version当前目录中的文件来设置本地特定于应用程序的Python版本。该版本覆盖全局版本,并且可以通过设置PYENV_VERSION环境变量或pyenv shell 命令来覆盖自身。
pyenv local 2.7.6
在没有版本号的情况下运行时,pyenv local报告当前配置的本地版本。您也可以取消设置本地版本
pyenv local --unset
先前版本的pyenv在名为的文件中存储了本地版本规范.pyenv-version。为了向后兼容,pyenv会读取.pyenv-version文件中指定的本地版本,但.python-version同一目录中的 文件将优先。
pyenv local(高级)
您可以一次指定多个版本作为本地Python。
假设您有两个版本的2.7.6和3.3.3。如果你比3.3.3更喜欢2.7.6
$ pyenv local 2.7.6 3.3.3 $ pyenv versions system * 2.7.6 (set by /Users/yyuu/path/to/project/.python-version) * 3.3.3 (set by /Users/yyuu/path/to/project/.python-version) $ python --version Python 2.7.6 $ python2.7 --version Python 2.7.6 $ python3.3 --version Python 3.3.3
pyenv global
通过将版本名称写入~/.pyenv/version文件来设置要在所有shell中使用的Python的全局版本。该版本可以被特定于应用程序的.python-version文件覆盖,也可以通过设置PYENV_VERSION环境变量来覆盖。
pyenv global 2.7.6
特殊版本名称system告诉pyenv使用系统Python(通过搜索来检测$PATH)。
在没有版本号的情况下运行时,pyenv global报告当前配置的全局版本。
pyenv global(高级)
您可以一次指定多个版本为全局Python。
操作和local类似
pyenv whence
列出安装了给定命令的所有Python版本。
$ pyenv whence 2to3
2.6.8
2.7.6
3.3.3
pyenv which
显示pyenv在运行给定命令时将调用的可执行文件的完整路径。
$ pyenv which python3.3 /home/yyuu/.pyenv/versions/3.3.3/bin/python3.3
pyenv rehash
为pyenv(即,~/.pyenv/versions/*/bin/*)已知的所有Python二进制文件安装填充程序 。在安装新版本的Python之后运行此命令,或安装提供二进制文件的软件包。
$ pyenv rehash
pyenv shell
通过PYENV_VERSION 在shell中设置环境变量来设置特定于shell的Python版本。此版本覆盖特定于应用程序的版本和全局版本。
$ pyenv shell pypy-2.2.1
在没有版本号的情况下运行时,pyenv shell报告当前值PYENV_VERSION。您也可以取消设置外壳版本:
$ pyenv shell --unset
请注意,您需要启用pyenv的shell集成(安装说明的第3步)才能使用此命令。如果你不想使用shell集成,你可以简单地设置 PYENV_VERSION变量:
$ export PYENV_VERSION=pypy-2.2.1
direnv
如果要在多个项目之间来回切换,其中不同项目需要使用同一个库的不同版本,如果手动切换自然麻烦,这时候就可以用到环境自动加载工具direnv,可以使在命令行中根据进入的目录不同,自动加载不同的环境配置。
一、下载安装
$ wget -c https://github.com/direnv/direnv/releases/download/v2.19.1/direnv.linux-amd64 $ mv direnv.linux-amd64 direnv $ sudo mv direnv /usr/local/bin/ #可以从 https://github.com/direnv/direnv 下载自己操作系统的包。
针对不同的shell使用不同的hook
$ eval "$(direnv hook bash)"
二、使用
这里我们创建两个目录,分别叫 myenv1 和 myenv2,然后我们测试分别进入不同目录时自动切换环境。
在 myenv1 目录下创建 .envrc 文件,其中设置了一个环境变量并打印欢迎消息,内容如下:
#!/bin/bash export myenv=myenv1 echo -e "\e[1;34m##################################################\e[0m" echo -e "\e[1;34m# Welcome to $myenv #\e[0m" echo -e "\e[1;34m##################################################\e[0m"
在 myenv2 目录下创建 .envrc 文件,其中设置了一个环境变量并打印欢迎消息,内容如下:
#!/bin/bash export myenv=myenv2 echo -e "\e[1;34m##################################################\e[0m" echo -e "\e[1;34m# Welcome to $myenv #\e[0m" echo -e "\e[1;34m##################################################\e[0m"
会出现
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
使修改生效
direnv allow
通过cd到不同目录查看效果

浙公网安备 33010602011771号