用pyenv管理Python开发环境

Python项目开发的时候,不同项目用到的Python版本不一样或用到的依赖包不一样。这时候需要做开发环境隔离,给每个项目一个单独的python开发环境。一般用 pyenv 配合 pyenv-virtualenv 插件使用,可以实现Python多开发环境的隔离。

安装

pyenv

pyenv可以用git克隆安装,也可以下载zip后解压安装。下载zip包解压安装

1
2
3
4
5
6
7
$ wget https://github.com/pyenv/pyenv/archive/v1.2.7.tar.gz
$ tar xvfz v1.2.7.tar.gz
$ mv pyenv-1.2.7 ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >>~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >>~/.bash_profile
$ source .bash_profile

pyenv安装完成,用pyenv install --list命令查看提供可安装的python版本

1
2
3
4
5
6
7
8
9
10
$ pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
2.4
2.4.1
... ...
2.7.15
... ...
Python

安装或更新python所需依赖

1
2
3
$ yum install zlib-devel bzip2-devel openssl-devel ncurses-devel \
sqlite-devel readline-devel tk-devel gdbm-devel db4-devel \
libpcap-devel xz-devel patch curl nss

比如安装2.7.15版本的python

1
$ pyenv install 2.7.15 -v

为所有已安装的可执行文件创建shims,如:~/.pyenv/versions/*/bin/*,因此,每当增删了Python版本或带有可执行文件的包(例如celery, uwsgi, pip)以后,都应该执行一次该命令

1
$ pyenv rehash

查看当前已安装python的版本

1
2
3
$ pyenv versions
system
* 2.7.15 (set by /root/.pyenv/version)

设置系统全局python版本为2.7.15

1
$ pyenv global 2.7.15
优先级

pyenv优先级顺序shell > local > global
global全局Python版本,通过命令pyenv global设置,手动将版本号写入~/.pyenv/version也可以。作用范围是系统。
local本地的Python版本,通过命令pyenv local设置,手动将版本号写入当前目录下的.python-version也可以。作用范围是当前目录,优先级较global高。
shell当前终端的Python版本,通过命令pyenv local设置,手动定义当前终端的PYENV_VERSION环境变量也可以。作用范围是当前终端,优先级比local和global都要高。

pyenv-virtualenv

采用git安装

1
2
$ git clone https://github.com/pyenv/pyenv-virtualenv.git   ~/.pyenv/plugins/pyenv-virtualenv
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

环境隔离

创建隔离环境命令格式

1
$ pyenv virtualenv Pyhton版本 环境名称

例如,创建一个隔离环境devtest,Python版本2.7.15

1
2
3
4
5
6
$ pyenv virtualenv 2.7.15 devtest
New python executable in /root/.pyenv/versions/2.7.15/envs/devtest/bin/python2.7
Also creating executable in /root/.pyenv/versions/2.7.15/envs/devtest/bin/python
Installing setuptools, pip, wheel...done.
Requirement already satisfied: setuptools in /root/.pyenv/versions/2.7.15/envs/devtest/lib/python2.7/site-packages
Requirement already satisfied: pip in /root/.pyenv/versions/2.7.15/envs/devtest/lib/python2.7/site-packages

切换到环境devtest,用pip list可以看到新的环境安装包只有pip、setuptools、wheel。这是一个干净的环境,可以开始一个新的Python项目开发。

1
2
3
4
5
6
7
8
9
$ pyenv activate devtest
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1` to simulate the behavior.

(devtest) $ pip list
Package Version
---------- -------
pip 18.1
setuptools 40.6.3
wheel 0.32.3

退出当前环境

1
$ pyenv deactivate

列出所有的环境

1
$ pyenv virtualenvs

删除环境devtest

1
$ pyenv virtualenv-delete devtest
----------------本文结束 感谢阅读----------------