在Python开发中,有些状况下,咱们可能面临在一台机器上同时安装多版本Python的需求。好比:python
那么,如何高效地在单台机器上实现多个版本Python(具体来讲,这里Python指的是Python解释器)的安装和维护呢?sql
除此以外,咱们还可能面临在一台机器上安装多个版本的某个Python第三方库的需求。好比:有多个Python项目,每一个项目依赖于不一样版本的Python第三方库requests
。这时候,如何在单台机器上实现多版本Python requests
库的安装和维护呢?shell
本文介绍一款神器。它提供了最简洁的方法,让上述两种需求同时获得知足。bash
实现多版本Python管理的工具叫作pyenv
。它的安装命令为:curl
curl https://pyenv.run | bash
安装完成后,须要进行简单配置。将下面几行配置信息添加到文件~/.bashrc
中,而后执行命令exec "$SHELL"
,让配置生效。工具
export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
接着,能够经过查看pyenv
版原本检查安装和配置是否成功:学习
root@hzettv53:~# pyenv -v pyenv 1.2.12
因为pyenv
是基于源代码进行Python的编译和安装的。所以,咱们须要先安装编译相关的一些依赖包。因为这些依赖是操做系统相关的。所以,不一样的操做系统,安装命令不一样。开发工具
以常见的Ubuntu/Debian系统为例,安装命令为:ui
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
如今就可使用pyenv
安装Python了。安装新版本以前,咱们先查看系统当前安装的Python版本:url
root@hzettv53:~# pyenv versions * system (set by /root/.pyenv/version) root@hzettv53:~# python -V Python 2.7.12
可见,当前使用的是操做系统自带的Python,其版本为2.7.12。这时,若是咱们须要安装一个新的版本,例如Python 3.7.2, 只需执行命令:
pyenv install -v 3.7.2
注意,因为pyenv
是基于Python源代码进行编译安装,所以这一步骤会有点慢,须要耐心等待。安装完成后,查看系统中的Python版本:
root@hzettv53:~# pyenv versions * system (set by /root/.pyenv/version) 3.7.2 root@hzettv53:~# python -V Python 2.7.12
能够看到,系统中已经有两个版本的Python了。可是当前使用的仍然是系统版本。若是想要使用新安装的版本,只需:
root@hzettv53:~# pyenv global 3.7.2 root@hzettv53:~# pyenv versions system * 3.7.2 (set by /root/.pyenv/version) root@hzettv53:~# python -V Python 3.7.2
这里命令pyenv global 3.7.2
改变了全局的Python版本。若是只想在当前文件夹中使用Python 3.7.2,那么能够执行:pyenv local 3.7.2
;若是只想在当前Shell环境中使用Python 3.7.2,那么能够执行:pyenv shell 3.7.2
。
若是同时设置了global, local和shell三种Python版本,那么哪种会真正生效呢?这里有一个优先级排序,即shell > local > global。举例来讲,若是前后执行了pyenv local 3.7.2
和pyenv global 3.7.3
,那么因为local的优先级高于global,因此当前生效的Python版本是3.7.2。
这样,咱们便很方便地实现了单一机器上安装多个版本的Python,而且能够根据实际须要,灵活地切换Python版本。学习python过程当中有不懂的能够加入个人python零基础系统学习交流秋秋qun:前面是784,中间758,后面是214,与你分享Python企业当下人才需求及怎么从零基础学习Python,和学习什么内容。相关学习视频资料、开发工具都有分享
不一样项目之间,不只依赖的Python版本可能不一样,并且依赖的Python第三方库的版本也可能不一样。咱们将项目所依赖的Python及其第三方库统一称为虚拟环境。若是同时存在多个Python项目,各自依赖不一样的虚拟环境,如何有效管理呢?
这时,咱们仍然可使用pyenv
来达成咱们的目标。使用下述命令能够建立一个指定Python版本的虚拟环境。
pyenv virtualenv <python_version> <environment_name>
虚拟环境的名称建议体现Python项目名称。例如,咱们有一个叫作myproject
的项目,而且基于Python 3.7.2
进行开发,那么能够执行命令:
pyenv virtualenv 3.7.2 myprojectenv
这样,咱们便建立了一个名为myprojectenv
的虚拟环境。那么如何使用它呢?咱们在须要使用这个虚拟环境的地方(例如,cd到项目myproject
的文件夹路径),执行如下命令便可:
pyenv local myprojectenv
这时,咱们能够看到,当前使用的Python和pip都指向的是虚拟环境myprojectenv
:
root@hzettv53:~/workspace/test# pyenv which python /root/.pyenv/versions/myprojectenv/bin/python root@hzettv53:~/workspace/test# pyenv which pip /root/.pyenv/versions/myprojectenv/bin/pip
这意味着,咱们此时用pip命令安装的全部Python第三方包,都是安装到了虚拟环境myprojectenv
的路径下,而不是系统路径。这样,咱们便实现了Python项目和其所依赖的Python开发环境(即虚拟环境)的绑定。不一样的Python项目,彻底能够各自使用不一样的Python虚拟环境,互不影响。
那么,若是一个Python项目须要使用两种Python虚拟环境呢?咱们只须要建立两个虚拟环境(例如myprojectenv
和myprojectenv2
),而且在使用时进行切换便可:
root@hzettv53:~/workspace/myproject# pyenv local myprojectenv root@hzettv53:~/workspace/myproject:~# python -V Python 3.7.2 root@hzettv53:~/workspace/myproject# pyenv local myprojectenv2 root@hzettv53:~/workspace/myproject:~# python -V Python 2.7.12
开发环境的高效管理是软件工程中的一个难题,尤为是须要同时维护多个环境的时候。pyenv
提供了在单台机器上实现多版本Python和多类型Python虚拟环境的有效管理。pyenv
的使用十分简单,易于上手