Python环境控制的方式很多,如常用的虚拟环境实现的手段Virtualenv,配合workon使用十分方便。但无法便捷的控制Python版本。 今天我们便学习利用Pyenv和Pyenv-virtualenv 来控制python版本与虚拟环境。
Pyenv
我们用Pyenv托管Python的版本
pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.
安装Pyenv
这里讨论的是类unix操作系统下,windows用户可以在wsl下安装(推荐),或者参考使用pyenv-win
-
将pyenv clone 到本地
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
-
配置环境变量
bash用户:
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
zsh用户:
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc $ echo 'eval "$(pyenv init -)"' >> ~/.zshrc
-
建议构建的依赖环境
可以不安装,但是使用中有可能会遇到一些奇怪的问题
https://github.com/pyenv/pyenv/wiki
-
Mac OS X:
$ brew install openssl readline sqlite3 xz zlib
-
Ubuntu/Debian/Mint:
$ sudo apt-get update; sudo apt-get install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
-
CentOS/Fedora 21 and below:
$ sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel
-
-
重新启动终端
$ exec "$SHELL"
至此Pyenv已经安装完毕
使用Pyenv
-
查看可以安装的python版本
$ pyenv install --list
-
安装python版本到本地
$ pyenv install 3.7.0
-
查看已经托管的python版本
$ pyenv versions
-
删除某个托管的版本
$ pyenv uninstall 3.7.0
pyenv-virtualenv
我们利用pyenv-virtualenv 配合pyenv管理 已经通过pyenv托管的python版本 的虚拟环境
(其实pyenv创建的python版本和pyenv-virtualenv都是一个虚拟环境, 而pyenv-virtulalenv是作为一个插件协助pyenv管理)
pyenv-virtualenv is a pyenv plugin that provides features to manage virtualenvs and conda environments for Python on UNIX-like systems.
安装pyenv-virtualenv
-
clone pyenv-virtualenv 到本地
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
-
配置环境变量
-
bash 用户
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
-
zsh 用户
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
-
-
重新启动终端
$ exec "$SHELL"
至此pyenv-virtualenv安装完毕
使用pyenv-virtualenv
pyenv-virtualenv 作为一个pyenv 的内部插件与 virtualenv 的使用略有不同,但是原理思路都是一样的。
-
创建虚拟环境
(使用的python版本必须已经托管在pyenv下)
$ pyenv virtualenv 3.7.0 py37
-
激活虚拟环境
$ pyenv activate py37
这时候会有一条提醒:pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
在使用虚拟环境的时候,shell前方有一个(py37) 的提醒标志。如果按照它给出的操作便可以去掉提醒标志,个人觉得没有必要 -
退出虚拟环境
$ pyenv deactivate
-
进入文件夹自动加载环境
$ pyenv local py37
运行该命令后会在当前文件夹创建一个.python-version文件, 当用户进入存在该文件的目录后便会自动激活py37虚拟环境 -
卸载虚拟环境
$ pyenv uninstall my-virtual-env
或$ pyenv virtualenv-delete my-virtual-env
嗯,有了pyenv便可以放心大胆的去构建不同的python环境。而不会更改mac的系统python了。至尊循环走起!