文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-11 20:01

关注

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

Python 是一门出色的通用编程语言,经常作为第一门编程语言来教授。二十年来,我为它撰写了很多本书,而它仍然是我的首选语言。虽然通常来说这门语言是简洁明了的,但是(正如 xkcd 讽刺的),从来没有人说过配置 Python 环境也是一样的简单。

一个复杂的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。在这个环境中,可以安装你最喜欢的运行器 —— 也就是你会经常用来运行其他软件的软件。就目前而言,我的首选是 tox

使用 tox 作为 Python 运行器

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

  1. $ workon runner
  2. $ tox

这个工作流程之所以重要,是因为我要在多个版本的 Python 和多个版本的依赖库中测试我的代码。这意味着在 tox 运行器中会有多个环境。一些会尝试在最新的依赖关系中运行,一些会尝试在冻结的依赖关系中运行(接下来会有更多的介绍),我也可能会用 pip-compile 在本地生成这些环境。

附注:我目前正在研究使用 nox 作为 tox 的替代品。原因超出了本文的范畴,但值得一试。

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

Python 是一种动态编程语言,这意味着它在每次执行代码时都会加载其依赖关系。能否确切了解每个依赖项的具体运行版本可能意味着是平稳运行代码还是意外崩溃。这意味着我们必须考虑依赖管理工具。

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

  1. .

是的,没错。只有一个点的单行。我在 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 的功能既强大又赏心悦目。为了编写这些代码,我依靠了一个对我来说很有效的特定工具链。工具 pyenvvirtualenvwrappertox 和 pip-compile 都是独立的。但是,它们各有各的作用,没有重叠,它们一起打造了一个强大的 Python 工作流。

 

来源:Linux中国内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯