Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。
几年前,当我开始学习Python时,我经常想知道什么是“正确的”或“最佳的”方法来准备系统的Python环境,以满足您的软件项目或您希望开始使用的一些基于Python的应用程序的需求: 我应该使用操作系统的包管理器安装模块吗?或者使用像pip这样的Python工具来安装?什么是“虚拟环境”,并且我要如何在我的项目中使用它们?pyenv、pip、pipenv、easy_install、setuptools、anaconda、conda、miniconda等所有这些都是什么?
在本系列文章中,我将介绍Python世界中最常见的完成这些任务的工具和技术。在这个系列的最后,我将分享我当时的一些想法、疑问和问题,讲述我在此期间收集的一些经验,并大致分享这次旅程的结果以及我现在的Python工作流看起来是什么样子。
pyenv介绍
这第一篇文章是关于pyenv的,它是一个轻量级的但又功能强大的Python版本管理工具,它在用户权限下工作,并且不会影响系统全局Python解释器。
安装pyenv
在我的开发工作站上,当我准备Python开发环境时,我通常做的第一件事就是安装pyenv。pyenv允许你轻松地安装并在多个Python版本之间进行切换。并且不需要管理员权限,因为一切都发生在你的用户上下文和$HOME目录(~)中。通过这种方式,它甚至可以用于多用户环境,比如工作中的共享系统,或者你为自己的主页租用廉价主机时得到的系统,在这个系统中你没有root权限。
你可以像这样使用一行命令来安装它(首先要确保满足先决条件和构建依赖项):
在不做任何更改的情况下,此命令会将最新版本的pyenv克隆到~/.pyenv目录中。
接下来,你需要将其加载到任何新启动的shell中。在执行了安装命令后,pyenv就会自动分享如何完成这个任务的建议:
注意,PATH所定义的路径中,这个新文件夹排在第一个。通过这种方式,对于你自己的shell,它比安装在不同位置的任何全局解释器版本(比如使用PMS安装的版本)都具有更高的优先级,这确保了执行python和pip命名命令总是使用指向pyenv的版本。
一旦以上代码被输入到你的shell配置文件,打开一个子shell,将这些配置加载到你当前的环境中:
现在pyenv命令在你的PATH中就可用了,以及将来由它安装的任何Python解释器。
强烈建议你立即搜索更新;即使在我们刚刚新安装它之后,应该不存在任何更新的情况下,因为你至少会看到pyenv工作良好:
使用pyenv安装一些Python解释器
让我们安装一些Python解释器,不是吗?
“几个? ! ?——我已经听到你说的了。
欧耶——欢迎来到pyenv的轻松世界!让我们以这些版本为例:
2.7.17
3.6.9
3.8.0
对于一个所有可用解释器的列表,请执行pyenv install --list。
多亏了pyenv,安装就像现在这么简单了:
BAM—现在你的环境中已经有了Python 2.7.17 !由于它们是安装到~/.pyenv/versions中的,所以没有一个版本会扰乱全局环境。
对前面提到的版本重复这个步骤,就完成安装了。
请注意依赖项!
注意:你仍然需要自己为操作系统提供Python的构建依赖项!如果你在安装解释器的过程中看到这样的东西,你肯定是缺失了它们中的任何东西了(在这个例子中是zlib):
通过在Ubuntu中添加适当的“源”URI并执行apt-get build-dep python3.6来安装它们,正如Python的构建依赖项页面所建议的,这样就解决了Ubuntu Linux中的这个问题。请使用任何其他操作系统发行版来帮助你。
在多个Python解释器之间进行切换
你现在已经有几个Python解释器可用了——那然后呢?如何使用并在它们之间进行转换呢?将所有的配置更改为类似于~/.pyenv/versions/3.8.0/bin/python这样的东西似乎有点不方便,不是吗?
别担心,它比那容易多了!
假设,你即将在空的/new directory ~/project中启动你的Python项目。你所需要做的就是切换到那个目录,并使用pyenv启用你选择的解释器为“局部地”(稍后解释):
那多酷啊??你现在可以使用一个命令来切换你预安装的环境,该命令只会在你的项目文件夹中创建一个名为.python-version的文本文件!
这很大程度上减少了对你所有的脚本使用#!/usr/bin/env python的问题;不管你的项目正在使用哪个版本,也不需要为将来的版本改变而更改它。
关于pyenv作用域
注意: pyenv支持两种作用域:
局部
当前项目/目录及其子目录的作用域称为“局部作用域”。当你将目录更改为一个没有定义局部版本的目录时,此作用域将会自动更改为全局定义的内容。如稍后所示,你可以使用pyenv local命令来设置此作用域的版本。
2. 全局
如果没有定义特定的局部作用域(默认),则该作用域称为“全局作用域”。它被定义在~/.pyenv/version文件中,你可以使用pyenv global命令来设置和更改它。
这些定义的作用域的区别显示在这个简短的shell会话中:
在pyenv版本的输出中,我们看到所有的Python解释器都是由pyenv安装的。在本例中,全局解释器(默认)用星号(*);system进行标记。
system是一个特例:它会绕过pyenv安装的解释器,并在$PATH变量的其余部分中找到可执行的python。这意味着,它通常会解析为不是由pyenv安装而是由你的PMS或类似工具安装的Python解释器。
pyenv global再次显示全局作用域被设置为system。
pyenv local会打印当前目录的本地作用域被设置成了什么(目前还没有内容;回到全局)。
第一个python -V显示了Python的实际版本。它是系统的默认Python版本(2.7.15+)。
/usr/bin/python -V显示这与系统默认的python可执行文件的完整路径相同。
pyenv local 3.8.0将本地作用域设置为Python 3.8.0,正如python -V的下一次执行所示的。
请注意,在我们设置本地作用域之前,这个非常相同的命令生成了不同一个的结果!
一旦我们再次离开这个目录,我们就会回到全局作用域的2.7.15+版本。
返回到定义了局部版本的项目目录(包含.python-version文件)会立即再次启用局部地定义的版本,无需关心其他任何事情。
对于子目录,它甚至也会保持激活状态。
这就是你开始使用pyenv之前所需要了解的全部内容!它100%的涵盖了我日常工作中的需要,所以为了让你开始使用它,这里并没有遗漏太多。
你可以自由地从该项目的文档资源中研究更多的细节。
下一次
我希望你喜欢这第一篇文章!
我总是欢迎任何类型的评论,所以请在评论区自由留言。
在本系列的下一部分中,我将介绍pipenv——一个高级的Python包管理器、依赖项管理器和虚拟环境管理器。
请继续关注这个了不起的软件为你的Python依赖项管理工作流程带来的工作流!英文原文:https://www.marc-richter.info/using-pyenv-to-manage-your-python-interpreters/
译者:测试