推荐一款Python开发环境管理神器

栏目: Python · 发布时间: 5年前

内容简介:在Python开发中,有些情况下,我们可能面临在一台机器上同时安装多版本Python的需求。比如:那么,如何高效地在单台机器上实现多个版本Python(具体来说,这里Python指的是Python解释器)的安装和维护呢?除此之外,我们还可能面临在一台机器上安装多个版本的某个Python第三方库的需求。比如:有多个Python项目,每个项目依赖于不同版本的Python第三方库

Python 开发中,有些情况下,我们可能面临在一台机器上同时安装多版本Python的需求。比如:

  • 有多个Python项目,每个项目依赖不同的Python版本。
  • 有一个Python项目,它需要同时支持多个Python版本。

那么,如何高效地在单台机器上实现多个版本Python(具体来说,这里Python指的是Python解释器)的安装和维护呢?

除此之外,我们还可能面临在一台机器上安装多个版本的某个Python第三方库的需求。比如:有多个Python项目,每个项目依赖于不同版本的Python第三方库 requests 。这时候,如何在单台机器上实现多版本Python requests 库的安装和维护呢?

本文介绍一款神器。它提供了最简洁的方法,让上述两种需求同时得到满足。

多版本Python管理

实现多版本Python管理的 工具 叫做 pyenv 。它的安装命令为:

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系统为例,安装命令为:

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版本:

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.2pyenv global 3.7.3 ,那么由于local的优先级高于global,所以当前生效的Python版本是3.7.2。

这样,我们便很方便地实现了单一机器上安装多个版本的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虚拟环境呢?我们只需要创建两个虚拟环境(例如 myprojectenvmyprojectenv2 ),并且在使用时进行切换即可:

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 的使用十分简单,易于上手。想要更多地了解 pyenv ,可以阅读:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

智能革命

智能革命

李彦宏 等 / 中信出版集团 / 2017-5-1 / 68.00元

人类历史上的历次技术革命,都带来了人类感知和认知能力的不断提升,从而使人类知道更多,做到更多,体验更多。以此为标准,李彦宏在本书中将人工智能定义为堪比任何一次技术革命的伟大变革,并且明确提出,在技术与人的关系上,智能革命不同于前几次技术革命,不是人去适应机器,而是机器主动来学习和适应人类,并同人类一起学习和创新这个世界。“人工智能”正式写入2017年政府工作报告,折射出未来人工智能产业在我国经济发......一起来看看 《智能革命》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具