4 个用于成功设置 Python 环境的必备工具

这些工具的选择将简化您的 Python 环境,以实现流畅和一致的开发实践。
106 位读者喜欢这篇文章。
Python programming language logo with question marks

Opensource.com

Python 是一种出色的通用编程语言,通常作为第一门编程语言教授。二十年过去了,写了很多书,它仍然是我选择的语言。虽然人们常说这种语言很简单,但为开发配置 Python 却并非如此(正如 xkcd 所记录的那样)。

xkcd python illustration

复杂的 Python 环境:xkcd

有很多方法可以在日常生活中使用 Python。我将解释我如何使用 Python 生态系统工具,并且我会诚实地说明我仍在寻找替代方案的地方。

使用 pyenv 管理 Python 版本

我发现让 Python 版本在您的机器上工作的最佳方法是 pyenv。此软件可在 Linux、Mac OS X 和 WSL2 上运行:这三个我通常关心的“类 UNIX”环境。

安装 pyenv 本身有时可能有点棘手。一种方法是使用专门的 pyenv 安装程序,它使用 curl | bash 方法进行引导(有关更多详细信息,请参阅说明)。

如果您使用的是 Mac(或运行 Homebrew 的其他系统),您可以按照 此处 的说明安装和使用 pyenv。

一旦您按照说明安装并设置了 pyenv,您可以使用 pyenv global 设置“默认 Python”版本。一般来说,您会想要选择您“最喜欢”的版本。这通常是最新的稳定版本,但其他考虑因素可能会改变这一点。

使用 virtualenvwrapper 简化虚拟环境

使用 pyenv 安装 Python 的一个优点是,您关心的所有后续 Python 解释器安装都归您所有,而不是您使用的操作系统。

虽然在 Python 本身内部安装东西通常不是最佳选择,但有一个例外:在您上面选择的“最喜欢”的 Python 中,安装并配置 virtualenvwrapper。这使您能够立即创建和切换到虚拟环境。

我在 本文 中详细介绍了如何安装和使用 virtualenvwrapper

在这里,我推荐一个独特的工作流程。您需要创建一个虚拟环境,以便您可以多次重复使用它——runner。在这个环境中,安装您最喜欢的 runner;也就是说,您将定期用于运行其他软件的软件。截至今天,我的偏好是 tox

使用 tox 作为 Python 运行器

tox 是一个很棒的工具,可以自动化您的 Python 测试运行。在每个 Python 环境中,我都会创建一个 tox.ini 文件。我用于持续集成的任何系统都会运行它,我也可以使用上面文章中描述的 virtualenvwrapper 的 workon 语法在本地运行相同的系统

$ workon runner
$ tox

此工作流程重要的原因是,我针对多个 Python 版本和库依赖项的多个版本测试我的代码。这意味着 tox 运行器中将存在多个环境。有些将尝试针对最新的依赖项运行。有些将尝试针对冻结的依赖项运行(稍后会详细介绍),我也可能使用 pip-compile 在本地生成这些依赖项。

旁注:我目前正在查看 nox 作为 tox 的替代品。原因超出了本文的范围,但值得一看。

使用 pip-compile 进行 Python 依赖项管理

Python 是一种动态编程语言,这意味着它在每次代码执行时都会加载其依赖项。准确了解正在运行的每个依赖项的版本可能意味着代码顺利运行和意外崩溃之间的区别。这意味着我们必须考虑依赖项管理工具。

对于每个新项目,我都包含一个 requirements.in 文件,该文件(通常)仅包含以下内容

.

是的,没错。只有一行,只有一个点。我在 setup.py 文件中记录了“松散”的依赖项,例如 Twisted>=17.5。这与精确的依赖项(如 Twisted==18.1)形成对比,后者使您在需要功能或错误修复时更难升级到库的新版本。

. 表示“当前目录”,它使用当前目录的 setup.py 作为依赖项的来源。

这意味着使用 pip-compile requirements.in > requirements.txt 将创建一个冻结的依赖项文件。您可以在 virtualenvwrapper 创建的虚拟环境或 tox.ini 中使用此依赖项文件。

有时拥有从 requirements-dev.in(内容:.[dev])生成的 requirements-dev.txt 或从 requirements-test.in(内容:.[test])生成的 requirements-test.txt 很有用。

我正在研究是否应该用 dephell 替换此流程中的 pip-compiledephell 工具有很多有趣的功能,例如使用异步 HTTP 请求来处理依赖项下载。

结论

Python 既强大又赏心悦目。为了编写该代码,我依靠一个对我来说效果很好的特定工具链。pyenvvirtualenvwrappertoxpip-compile 这些工具都是独立的。但是,它们各自都有自己的角色,没有重叠,并且它们共同提供了一个强大的 Python 工作流程。

接下来阅读
标签
Moshe sitting down, head slightly to the side. His t-shirt has Guardians of the Galaxy silhoutes against a background of sound visualization bars.
自 1998 年以来,Moshe 一直参与 Linux 社区,帮助举办 Linux “安装派对”。他自 1999 年以来一直编写 Python 程序,并为核心 Python 解释器做出了贡献。Moshe 在这些术语出现之前就已经是一名 DevOps/SRE,他非常关心软件可靠性、构建可重现性以及其他此类事情。

1 条评论

非常有帮助的文章...Python 开发者似乎对哪种工具适合他们感到困惑。我认为这很棒

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.