当前位置: 首页 > 科技观察

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

时间:2023-03-19 22:50:03 科技观察

Python是一种出色的通用编程语言,通常作为第一门编程语言进行教授。二十年来我写了很多关于它的书,它仍然是我的首选语言。虽然该语言通常干净简单,但从来没有人说过(就像xkcd讽刺的那样)设置Python环境同样容易。复杂的Python环境。xkcd在日常生活中有很多使用Python的方式。我将解释如何使用这些Python生态系统工具。但老实说,我仍在寻找更好的选择。使用pyenv管理Python版本我发现在机器上运行特定版本的Python的最佳方法是使用pyenv。该软件适用于Linux、MacOSX和WSL2:这是我通常关心的三种“类UNIX”环境。安装pyenv本身有时会有点棘手。一种方法是使用专用的pyenv安装程序,它使用curl|bash方法(有关详细信息,请参阅其描述)。如果您使用的是Mac(或运行Homebrew的任何其他系统),则可以按照此处的说明安装和使用pyenv。按照说明安装和设置pyenv后,您可以使用pyenvglobal设置一个“默认”Python版本。通常,您会选择您的“首选”版本。这通常是最新的稳定版本,但如果涉及其他考虑因素,可能会选择不同的版本。使用virtualenvwrapper让虚拟环境更简单使用pyenv安装Python的好处之一是你后续安装的所有Python解释器环境都是你自己的,而不是操作系统级别的。虽然在Python本身内部安装东西通常不是最佳选择,但有一个例外:在上面选择的“首选”Python中,安装和配置virtualenvwrapper。通过这种方式,您可以立即创建和切换到虚拟环境。在这篇文章中,我具体描述了如何安装和使用virtualenvwrapper。在这里我推荐一个独特的工作流程:你可以制作一个可以大量重复运行的虚拟环境,并将其作为一个运行器。在此环境中,您可以安装您最喜欢的运行程序——即您将经常用来运行其他软件的软件。现在,我的第一选择是tox。使用tox作为Python运行器tox是自动化Python测试的好工具。在每个Python环境中,我创建了一个tox.ini文件。不管我用什么系统做持续集成,我都能跑起来。我可以使用上面文章中描述的virtualenvwrapper的workon语法在本地运行相同的东西:$workonrunner$tox这个工作流很重要,因为我想在多个版本中运行它针对多个版本的Python和多个版本的依赖库测试我的代码.这意味着toxrunner中将有多个环境。有些会尝试在最新的依赖项中运行,有些会尝试在冻结的依赖项中运行(稍后会详细介绍),我也可能会使用pip-compile在本地生成这些环境。旁注:我目前正在研究使用nox作为tox的替代品。原因超出了本文的范围,但值得一试。使用pip-compile进行Python依赖管理Python是一种动态编程语言,这意味着它会在每次执行代码时加载其依赖项。准确了解每个依赖项的哪个版本正在运行可能意味着顺利运行代码或意外崩溃之间的区别。这意味着我们必须考虑依赖管理工具。对于每个新项目,我都包含一个requirements.in文件,(通常)仅包含以下内容:是的,没错。只有一个点的单行。我在setup.py文件中记录了“松散”依赖项,例如Twisted>=17.5。这与Twisted==18.1这样的精确依赖形成鲜明对比,这使得在需要功能或错误修复时很难升级到新版本的库。.表示“当前目录”,它使用当前目录中的setup.py作为依赖源。这意味着使用pip-compilerequirements.in>requirements.txt创建一个冻结的依赖文件。您可以在virtualenvwrapper创建的虚拟环境或tox.ini中使用此依赖文件。有时,也可以从requirements-dev.in(内容:.[dev])生成requirements-dev.txt,或者从requirements-test.in(内容:.[test])生成requirements-test.txt。我正在研究在此过程中是否应该使用dephell而不是pip-compile。dephell工具有很多有趣的功能,例如使用异步HTTP请求下载依赖项。结论Python既强大又赏心悦目。为了编写这些代码,我依赖于一个非常适合我的特定工具链。pyenv、virtualenvwrapper、tox和pip-compile工具都是独立的。然而,它们各有各的用途,没有重叠,它们共同构成了一个强大的Python工作流。