多版本管理-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到不同目录查看效果

posted @ 2019-03-22 13:01  风中琉璃  阅读(508)  评论(0)    收藏  举报