创建成功的 Python 环境的 4 个基本工具

选择的这些工具将简化你的 Python 环境,以实现顺畅和一致的开发实践。html

Python 是一门出色的通用编程语言,常常做为第一门编程语言来教授。二十年来,我为它撰写了不少本书,而它仍然是个人首选语言。虽然一般来讲这门语言是简洁明了的,可是(正如 xkcd 讽刺的),历来没有人说过配置 Python 环境也是同样的简单。python

xkcd python illustration
xkcd python illustration

一个复杂的Python环境。 xkcdlinux

在平常生活中有不少使用 Python 的方法。我将解释我是如何使用这些 Python 生态系统工具的。但坦诚的说,我仍在寻找更好的替代品。git

使用 pyenv 来管理 Python 版本

我发如今机器上运行一个特定版本的 Python 的最好方法是使用 pyenv。这个软件能够在 Linux、Mac OS X 和 WSL2 上工做:这是我一般关心的三个 “类 UNIX” 环境。github

安装 pyenv 自己有时会有点棘手。一种方法是使用专用的 pyenv 安装程序,它使用 curl | bash 方法来进行(详见其说明)。编程

若是你是在 Mac 上(或者你运行 Homebrew 的其余系统),你能够按照这里的说明来安装和使用 pyenvruby

按照说明安装和设置了 pyenv 以后,你可使用 pyenv global 来设置一个 “默认的” Python 版本。通常来讲,你会选择你的 “首选” 版本。这一般是最新的稳定版本,但若是有其余考虑因素也可能作出不一样的选择。bash

使用 virtualenvwrapper 让虚拟环境更简单

使用 pyenv 安装 Python 的一个好处是,你全部后继安装的 Python 解释器环境都是你本身的,而不是操做系统层面的。app

虽然在 Python 自己内部安装东西一般不是最好的选择,但有一个例外:在上面选择的 “首选” Python 中,安装并配置 virtualenvwrapper。这样你就能够瞬间建立和切换到虚拟环境。curl

我在这篇文章中具体介绍了如何安装和使用 virtualenvwrapper

这里我推荐一个独特的工做流程:你能够制做一个能够大量重复运行的虚拟环境,用来作运行器runner。在这个环境中,能够安装你最喜欢的运行器 —— 也就是你会常常用来运行其余软件的软件。就目前而言,个人首选是 tox

使用 tox 做为 Python 运行器

tox 是一个很好的工具,可让你的 Python 测试自动化。在每一个 Python 环境中,我都会建立一个 tox.ini 文件。不管我使用什么系统作持续集成,均可以运行它,我能够用上面文章中描述的 virtualenvwrapperworkon 语法在本地运行一样的东西:

$ 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 工做流。


via: opensource.com/article/20/…

做者:Moshe Zadka 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关文章
相关标签/搜索