python的多语言版本和依赖包&隔离环境管理:pipenv+pyenv+autoenv
18年期间最优的python多版本和项目库管理方式.比docker更快.比pip+virtualenv更高效简单
熟悉nodejs的同学或者使用过前端react vue等的.都知道npm yarn这样的包管理神器.而切换node全局版本也可以使用nvm.当我们创建一个项目目录执行,npm init 即拥有了一个当前目录的依赖包环境.执行yarn add 或npm install即可安装相应的依赖库.
而python早期有pip,可以在全局安装依赖库,后来又拥有了virtualenv这种隔离的环境.但是都无法做到做到nodejs的方便.但是技术总是会进化的:
开始之前我们先介绍一下pipenv,pyenv以及autoenv,可对比nodejs: pyenv:类似于nvm用于安装不同版本的python语言.甚至pyenv命令也和nvm类似. Pipenv:用于取代pip和virtualenv. 她比pip拥有更强大的包管理功能.有具有virtualenv的隔离沙盒环境.它很好的将这两者合二为一了.但是pipenv依旧有缺陷,我们进入项目目录,无法自动切换沙盒环境.找到对应的安装依赖. Autoenv:autoenv正式解决pipenv唯一没有解决的难题,无需手动激活虚拟环境.进入目录即可激活!
一.pipenv+autoenv+pyenv的安装
安装pipenv
pip install pipenv
安装autoenv
Mac OS X 使用 Homebrew 安装
$ brew install autoenv
# bash 使用这条命令
$ echo "source $(brew --prefix autoenv)/activate.sh" >> ~/.bash_profile
# zsh 使用这条命令
$ echo "source $(brew --prefix autoenv)/activate.sh" >> ~/.zshrc
pip安装
$ pip install autoenv
# bash 使用这条命令
$ echo "source `which activate.sh`" >> ~/.bashrc
# zsh 使用这条命令
$ echo "source `which activate.sh`" >> ~/.zshrc
git安装
$ git clone git://github.com/kennethreitz/autoenv.git ~/.autoenv
# bash 使用这条命令
$ echo 'source ~/.autoenv/activate.sh' >> ~/.bashrc
# zsh 使用这条命令
$ echo 'source ~/.autoenv/activate.sh' >> ~/.zshrc
安装pyenv
github(有安装教程):https://github.com/pyenv/pyenv 或者使用brew:
brew update
brew install pyenv
接着,一定要配置环境变量,在.zshrc, bash_profile中添加:(如果不添加,pipenv将无法识别python版本)
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
二.pipenv+autoenv+pyenv的使用
设置python版本-pyenv使用:
#安装3.6python
pyenv install 3.7.0
#查看可安装的版本
pyenv install --list
# 显示安装的python版本
pyenv versions
#查看当前python版本
pyenv version
pipenv的基本使用
进入空目录,如果系统没有想要的python版本,需要用pyenv安装python版本.如果系统已有该版本,则使用pipenv 创建该版本的虚拟环境:
#查看系统中的python版本:
pyenv versions
* system (set by /Users/luz/.pyenv/version)
3.6.5
3.7.0
# 使用其中一个版本创建当前目录的沙盒环境
pipenv --python 3.6.5
如果不需要切换语言版本,也可以这么创建沙盒环境:
pipenv install
这样只是创建了一个类型于node中的package.json的文件: Pipfile Pipfile.lock等文件.这类似npm init命令.当然有所区别,python需要手动激活Pipfile中配置的依赖关系环境:
#通过这个命令激活
pipenv shell
激活才算是进入一个沙盒中的依赖环境.然后可以用pipenv 代替pip去安装当前沙盒环境的依赖包:
#通过这个命令激活
pipenv install flask django
是的flask,django都只属于当前这个沙盒环境.不信,你在pipenv后看看Pipfile中多了什么!
如何省掉手动激活(进入目录就激活虚拟环境)?—— autoenv的用法:
当我们在运行pipenv shell去激活沙盒环境时,系统会返回这个环境的位置:
pipenv shell
Launching subshell in virtual environment…
. /Users/luz/.local/share/virtualenvs/flask-site-9FpTxb5n/bin/activate
使用echo命令把这段内容+source存放在.env文件里.(.env为autoenv识别的文件.它会根据.env中存在的内容自动化执行一些行为):
echo "source /Users/luz/.local/share/virtualenvs/flask-site-9FpTxb5n/bin/activate">>.env
特别要注意.env文件开头时source,复制pipenv shell的结果时要注意.