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