您好,欢迎收听 Python Bites,我们将直接为您带来 Python 新闻和头条新闻。这是 2025 年 2 月 17 日星期一录制的第 420 集。我是 Michael Kennedy。我是 Brian Eichen。本期节目由我们和我们所有的东西赞助。如果您查看我们的课程、查看 Brian 的书或成为 Patreon 支持者,您就可以真正地支持我们,所有
所有这些都使这一切成为可能,我们感谢您的支持。如果您想与我们联系,我们现在主要使用 Blue Sky,当然还有 Mastodon。因此,所有这些内容、所有这些帐户(共有六个)的链接都在您播客播放器节目页面上的节目说明中等等。如果您想加入我们的直播,Brian,我们实际上是在正常时间进行直播。
没有夏令时,播客时间,没有那些事情。不,虽然是第 420 集。我们可能应该做一集 420 集之类的。我会的。可能应该。但是是的。我们有我们的时事通讯,它越来越好。我们收到了很多积极的反馈,人们非常喜欢新的格式。所以……
它有一个 TLDR 快速总结,然后它有一些深入的探讨,涵盖了我们可能不一定在节目中完全涵盖的内容。是的。我真的很喜欢它说的一项功能,如果您不熟悉这个主题,这里有一些链接可以供您参考。是的。了解它。是的。为了充分利用这一点并奠定基础。这里有一些资源供您使用,这很有趣,因为令人惊讶的是,很多很多很多收听节目的 Python 新手。对。说得通。但首先……
这让我很惊讶。是的。是的。好吧,说到节目内容,我们今天的第一项节目内容是什么?好吧,我本来想把它作为一个额外内容,但实际上这里有很多内容需要讨论。我认为有一个新的 PEP,PEP 772。这是一个打包治理流程。是的,
它处于草案阶段,所以还没有决定,但它是在 1 月 21 日刚刚创建的。作者是 Barry Warsaw、Deb Nicholson 和 Brad Yuen。这些都是一些非常……
非常,我有点相信这些人。所以我很想知道他们在谈论什么。另外,我们不是已经有 PyPA(Python 包装管理机构)了吗?这就是它在谈论的一点内容。并非反对 PyPA,而是
我将阅读几段内容。摘要以“本 PEP 提出一个 Python 包装委员会”开头,“拥有对包装标准、工具和实现的广泛权力”。“与 Python 指导委员会一样,”“包装委员会力求尽可能少地行使这项权力”;“相反,他们利用这种权力来建立标准流程。”然后在动机部分写道,
我读到这段话时有点忍俊不禁。随着 Python 包的成熟,当前管理技术开发、决策和流程的方式出现了一些相互关联的问题。
是的,是的,确实如此。我没有意识到这一点。有一个 Python 包装管理机构负责很多这项工作并维护很多工具。但它不是一个民选机构。当……让我们看看,它开始接管 Ian Bicking 的 pip 和 virtualenv 的维护时。
由 Brian Rosner、Carl Meyer 和 Janice Lytle 领导。但对此并没有正式的流程。所以可能有一个流程,但它没有说明 PyPA 中有哪些人以及谁做决定等等。然后有一个包装工作组。并且有互操作性标准。工作组更关注 PIP 和 PyPA
以及 setup tools 和其他一些工作。所以所有这些都是相关的,对我们如何使用 Python 至关重要,这就是我们如何处理打包的方式。所以我确实认为现在是时候了
有一个指导委员会之类的想法。我还非常喜欢这份文件,我正在查看规范、任务和职责以及如果有人消失一段时间该怎么办,因为你知道,这种情况会发生,该模型有点轻量级,而且是一个,但是也相当全面。
涵盖了很多案例。所以我甚至在考虑在其他情况下使用它。其他项目可能希望采用某种指导委员会类型的模型。这可能是一个值得参考的模型。无论如何,我完全赞成讨论可能成立一个包装委员会。这确实很有趣,当然。我绝对相信
背后的那些人。对我来说,这是第一印象,我没有读过任何关于这方面的资料,所以 PEP 772 对我来说是新的。我觉得我们已经有很多人在管理这些东西了,另一个额外的
额外的组在管理它,这似乎太多了。例如,我们可以,我们有没有人,也许指导委员会本身对包装有更多权力。他们似乎确实会,因为他们负责监督 Python,是否可以有一个 PyPA 主席,谁被选举出来,谁拥有否决权之类的东西?你知道我的意思吗?我觉得现有的结构可以加强,而不是像另一个
外部结构。也就是说,正如你所说,这对社区至关重要。所以这可能比什么都没有好。虽然,我不知道,它似乎只会增加另一层
混乱,比如我们应该和谁谈?谁真正负责这件事?我不知道。你怎么看?好吧,确实,我的意思是,它确实谈到了指导委员会已经有很多事情要处理,并且有一个包装工作组,基本上这将取代和扩展工作组。还有核心团队,Python 核心团队,他们是如何参与的?他们也应该有发言权,是的。是的,但在过去,我们有
我们有 Python 包装管理机构的组合,我们没有选举人员或代表其他群体的流程。而且我认为,很多事情只是与领导这些事情的一些人交谈,例如与使用的人交谈,你知道,创建,你知道,hatchling 和 flit 背后的人等等。如果这是真的,我的意思是,这些人应该有发言权,但我认为他们不应该有,
在影响所有 Python 的事情上拥有过大的发言权。所以是的,我认为 Python 指导委员会和包装指导委员会肯定会互相交谈。所以——是的,你会这么认为。你肯定会这么认为。
MARK MANDEL:太棒了。好的。接下来是我的第一项内容。这是 Django 和 MongoDB 的结合,我非常喜欢 MongoDB。我认为这是一个很棒的数据库。它运行起来非常容易。你通常不需要运行迁移来更改它。非常快。有一个你可以运行的开源免费版本。各种好东西。但它与 Django 非常不兼容,因为 Django 主要基于关系型数据库。
特别是对于 Django,因为它利用了大量的数据库来驱动其包含电池的功能,所以数据库是什么真的很重要。例如,我的 Court 项目,我使用什么数据库并不重要。我的意思是,我必须使用它,但这不会影响我编写代码的方式或插件或任何东西的工作方式,对吧?但是管理员后端,
表单、验证,所有这些都基于 Django 中的数据库和数据库模型。因此,这里的公告是官方的 Django MongoDB 后端现在可以在公开预览版中使用了。因此,您可以安装此内容并使用 MongoDB。您可以使用分层文档。您可以使用所有这些东西。
但是当您尝试使用 Django 功能(如表单、管理员后端等)时,它们可以正常工作,因为此内容管理了中间过程。所以这里有很多很酷的功能。让我们看看它是什么。它说能够自信地使用 Django 模型。开发人员可以使用 Django 模型来表示 MongoDB 文档,并支持 Django 表单、验证和身份验证。优秀。管理员支持,就像我提到的那样,无密码。
该软件包允许用户像往常一样启动 Django 管理员页面,并完全支持迁移和数据库模式历史记录。酷。我知道我说你不需要迁移。如果你真的想超级转换你的数据,你技术上可以运行它们,但它只是不那么需要。
来自 settings.py 的本机连接,就像任何其他数据库提供程序一样,开发人员可以在 settings.py 中自定义数据库引擎,例如复制、写入关注、集群分片,可能所有这些东西。MongoDB 查询优化支持。因此,字段查找已被聚合调用替换。因此,MongoDB 具有常规数据库查询,但也具有完整的聚合引擎,您可以在其中执行某种数据科学类型的工作。
因此,您可以将其用于许多行为。并且有一个查找命令,它
它在 MongoDB 中代表连接,并且也会使用它。它说它具有有限的高级功能。它还具有聚合管道支持。这就是我刚才谈到的数据科学类型的东西。无论如何,如果您想使用 MongoDB 并且您是 Django 用户,请查看一下。MARK MANDEL:所以我有问题。所以这个——我认为我知道答案。但是当我们说官方 Django MongoDB 后端时,
它是 MongoDB 官方的,对吧?它不是 Django 官方的。是的,完全正确。这是一个 MongoDB 计划,而不是一个 Django 计划。是的,完全正确。它位于 mongodb.com,创建它的人就在那里。但他们确实指出,为什么他们要说些什么?
它说,在过去的几年里,Django 开发人员越来越多地使用 MongoDB,这提供了一个机会,等等。他们说,看,你需要深入了解 Django,它的工作原理、它的习惯用法、它的约定等等。所以他们投入了大量工作来使其尽可能像 Django 一样。但它是一个 MongoDB 东西。是的,我只是想澄清一下。另外,我认为这实际上很好,因为如果你
这是一个核心决定。如果您要使用 Django 作为您的应用程序前端,然后,或者后端,无论如何,然后在
然后是支持它的 MongoDB,您如何将这两者联系起来,您希望依赖一个您知道会坚持下去并得到支持的项目。因此,如果这是 MongoDB 官方支持的,这是一件好事。所以很酷。是的,它绝对是。而且他们长期以来一直在支持他们的 Python 驱动程序、库包,无论您想称之为什幺。在过去的 10 年里,它几乎完美无缺。是的。
当他们弃用使用 Python 中的装饰器创建异步函数的能力时,发生了一次转变。它就像一个@async 联系。我不记得装饰器到底是什么,因为我一直认为使用 async 关键字更好。但在 3.4 中,我认为有一种方法可以将函数描述为异步的,而无需使用 async 和 await 关键字,因为它们不存在,对吧?所以当它被取消时,他们落后了几周,它只是……
开始以某种方式失败,但这是我看到的唯一问题,除了他们一直在更新所有东西之外,所以我认为他们是相当好的管理者,是的,成为 Python 社区的一部分就是我的意思,很酷,好的,回到你那里,我有一些沉重的话题,我有一个轻量级的话题,嗯,这个来自一个名叫量子的人……
qntm,它在这里,他们不在那里,我们不知道,我们不知道,但是……也是一个科幻作家,所以显然我正在调查,量子是谁,但是但是
但是无论如何,开发人员哲学。所以这个想法是,我认为是在他们的工作中或什幺地方。是的,几周前在工作中,他们进行了一次演讲,他们想让一些高级开发人员(包括这个人)在五分钟内为初级开发人员介绍一些个人软件开发理念。所以只是一些提示。
我浏览了这些内容,我认为我当时想,是的,很多这些都是值得记住的好东西。所以我将只浏览其中的一小部分。实际上只有一小部分。但首先是避免。
无论如何都要避免出现这种情况,即从头开始重写看起来很有吸引力。乍一看,我认为,哦,这就像,你知道,基本上,如果你曾经想过要重写所有内容,那就不要这样做,因为它比看起来难得多。但这并不是真的。它也是关于评论的,如果你
如果你到了那一点,那么在此之前会有很多决定,人们可以看出危险信号并说,我们正在向这个系统添加一些可怕的东西。让我们也许退一步,更仔细地做一下,这样我们将来就不必重写它了。
所以它就像考虑那些警告信号,注意技术债务并在进行中清理,而不是等到最后你准备扔掉它。因为通常发生的情况是它不会
所有曾经做过这件事的核心人员都离开并去了另一家公司。无论如何。好的,下一个。我喜欢这个。目标是在 50% 的可用时间内完成 90%。这看起来很疯狂,对吧?除了它是正确的方法。
不,这是对的。这是正确的事情。我忘记了一个我喜欢的引语。这是我第一次忘记的。这是工作的前 90% 占用了 90% 的时间。工作的最后 10% 占用了另外 90% 的时间。是的。所以无论如何,对于那些数学不好的人来说,笑话是时间不是 180%,你只有 100%。无论如何,就像……
无论如何,重要的是要记住最后一点。我认为这是一个完全的离题。就像搬出房子或公寓一样。你可以把 90% 的东西搬出去,你会想,还有一天的时间把其他东西搬出去。有一个垃圾抽屉。
是的。有垃圾抽屉,有,有你忘记的橱柜里的东西,剩下的东西需要一半的时间。是的。对这些情况不太了解的人。他们没有做过很多大型项目。是的,你让它工作。你很快就能让它工作。你会想,看,它可以工作,但它是错误处理、日志记录、重试、故障转移、电子商务、电子邮件、重置密码、
与您尝试构建的内容实际上没有任何关系的东西,但在所有这些都到位之前,它不是产品或合适的专业事物。这就像另外 90%。连接支付系统,以便人们可以实际为此付费。诸如此类的事情。所有这些。是的。所有这些。然后你会想,好吧,现在我必须处理税务了。哦,我的天哪。就像,我们怎么会处理税务呢?
当我只是想在事情中添加一个待办事项时,我两个月前就完成了,你知道,就是这样。我前几天看到一篇文章说,我很高兴我们在学校花了这么多时间在平行四边形上,而花在税务上的时间却很少。是的。哦,我的天哪。
- 100% 公平。- 好的,再次稍微提前一点,自动化良好实践。这是一个很大的问题,但这一个让我想起了我曾经在为团队开发流程时,
你自动化正确的方法,以便正确的方法成为简单的方法。然后你就不必说服人们去做。他们只会想走捷径。自动化有帮助。想想——- 它可以是千篇一律的或复印模板。它可以是 get pre-commit 钩子。它可以是持续集成。那里有很多唾手可得的低垂果实。- 是的,如果您想确保每个人都正确设置了他们的环境,请编写一个设置脚本来设置。
是的。或者 Docker 或其他什幺。是的。Docker 是一个好主意。考虑病态数据。我实际上,就像,我想把这个踢出去,因为……
我认为太多人考虑的是,它说没有人关心黄金路径。边缘情况是整个工作。虽然这是真的,但我认为人们停止编写测试是因为他们只想编写,他们喜欢关注所有这些边缘情况并从快乐路径开始,至少在进入极端情况之前先记录和测试你的快乐路径。所以无论如何。
我将提前跳过。通常有一种更简单的方法来编写它。是的。但有时粗糙的东西也很好。编写可测试的代码。是的。我可以添加一个关于你的测试吗?就像一个推论或一个引理?引理如何?好的。知道何时编写应该可维护的代码,以及何时编写一次性代码。是的。是的,绝对的。好的。
是的,你知道,每当很多人说编写可测试的代码时,他们通常的意思是单元可以测试。而我不认识的人,我更倾向于,如果你可以从系统级别测试它,那就足够了。然后也在它的,代码可证明是正确的还不够。它应该显而易见、可见且微不足道地正确。
然后我将添加一个推论,即即使它显而易见、可见且微不足道地正确,它有时也会失败。所以你应该为它编写一个测试。所以,是的。还有一个,考虑你的,明智地选择你的依赖项,对吧?上周引用 Armin 的话。是的。两周前,上一集。无论如何,一些值得思考的好东西。即使,即使我在某些情况下不同意作者的观点,我喜欢,它很好。这是一个很好的、不错的圆满答案。
主题列表。我看到你更喜欢经典物理学,物理学,而不是量子力学。明白。我是一个古典主义者。是的。是的,完全正确。好的。好吧,是时候介绍另一个新的 Python 了。非常非常酷。喜欢它。所以 Python 3.12.13,第二个维护版本。是的,没错。因为第一个不是维护版本。3.13.2?3.13.2。我不知道我使用了哪些字母和数字,但是 3.13.2 最终版已经发布了。
并且有 250 处更改。哇。对于这里的东西来说,这是一个很大的变化。所以,你知道,当你访问博客文章并查看它时,这很有趣,这让我抓狂。他们链接到 312 或 313 或您所使用的任何版本的变化。他们会链接到它,它会说,这是新的内容。哦,我们有一个新的专门的解释器功能等等。这并不是这个版本的发布说明。这只是全部内容。所以我链接到实际的变更日志。
对于这个。您可以浏览并查看每一个。大多数都是 GitHub 图片、问题、gh 破折号等等,例如在 os.environment 被无效值覆盖时修复 Pyreple 失败。就像,哦,好的,我想你可以设置那个东西。这看起来很奇怪,但可以。无论如何,你浏览这里,可能最有趣的是
围绕安全性的内容,其中有 1、2、3、4、5 个不同的安全问题,即使你认为 Python 对你来说运行良好,你可能也想知道这些东西,因为这总是让我紧张。我不确定你呢。是的。他们有一个性能部分。现在他们只是将性能内容混合在其他内容中,但也有一些性能更新。让我们看看。对我们来说,Brian,我们要做的就是制作所有应用程序,包括 Python Bytes,
Python,白色搜索,其他一些东西。转到 Docker 容器。我在节目说明中有一个词。命令只是运行 UVV 和 V 破折号破折号 Python 313。只需重建该 Docker 容器,其他所有内容都依赖于重建所有 Docker,只需说,你知道,构建所有需要更新的内容。所有应用程序现在都在运行全新的版本。所以
这有点像自动化魔法。你不必更改它们,对吧?你只是——一切依赖于这个基本的 Python Docker 容器。如果你告诉 UV(这太棒了)安装新的,那么它们都会立即获得它。MARK MANDEL:是的,不错。MARK MIRCHANDANI:是的。那是我们所有的东西吗?MARK MANDEL:我认为是的。MARK MIRCHANDANI:我认为是全部。MARK MIRCHANDANI:一些额外内容?MARK MIRCHANDANI:是的,额外内容。
实际上,我们在这里。你有什幺额外内容吗?我只是——是的,我只有一个。好的。我会把它弹出来。让我们看看。我最近一直在考虑插件,仍然使用顶级 PyTest 插件列表并尝试设置剧集、播客剧集。
但是插件列表已经更新了几次,例如 2 月份的更新,我从中获取此数据的集合是从 15,000 个中提取的,这已经足够了。这是一个相当不错的集合。是的,你得到的插件远不止 200 个
插件,它开始深入到对很多人来说不太有用的东西中。所以这已经足够了。但是,我确实得到了我正在寻找名称 pi test。然后一些人提醒我,假设有一个内置的小插件来帮助 pi test。然后还有一个名为 syrupy 的插件,我想查看一下,我从未使用过那个。它真的很粘。
是的,但这看起来很酷。所以我也要查看一下。但是,所以还有其他方法可以确定它是否是插件,例如我可以查看 Trove 分类器,我可能应该这样做,但我没有。所以如果有一个插件没有 PyTest 在名称中,请告诉我。我会将其添加到可能的包含列表中。
它仍然按顺序排列。然后我还添加了播客剧集的链接。所以如果我,如果我在播客剧集中介绍过这些内容之一,你就可以直接从那里获取链接。哦,这是一个好主意。我喜欢它。而这些就是,这正是我想介绍的内容。所以是的。
优秀。我有一些额外的事情要介绍,不多。PyScript,你知道,PyScript,你可以在浏览器的前端使用 WebAssembly 运行 Python。这是一个非常酷的项目,基于 Anaconda。他们发布了一个新版本,主要增加了对 PyGame 的更好支持。想象一下,Brian,你创建了一个 PyGame 游戏,然后你想与人们分享它。回到你的第一项内容,例如打包 Python 给某人是非常困难的。是的。
MARK MANDEL:——要做。所以,特别是如果你是一个年轻的爱好者,正在创建一个平台游戏 2D 卷轴游戏,你构建了它,你会想,好吧,我现在如何发送给我的朋友?这会让人沮丧,对吧?所以有了这个,你可以使用 Pygame CE 库用 Pygame 编写它,然后说,你得到它的方式是我将其发布到 Netlify 或任何其他静态站点位置。现在你有了游戏。MARK MIRCHANDANI:哦,不错。MARK MANDEL:这很酷。所以无论如何,让我们大声说出来。我们还有一些——记住茶杯——茶壶?茶壶——MARK MIRCHANDANI:是的。
我有一些后续内容。哦,天哪。我没有,我认为我没有登录。我现在不想弄乱登录。所以基本上我们会回到这个。所以名字是,我认为是 Michael。是的。Michael Bayen 为我们提供了一些很棒的后续内容,但我下次会这样做。因为我没有记下笔记,而且它们很长,我不想曲解它们。好的。一些关于 pep 的事情,回到我们讨论过的 pep。我喜欢这个名字 2026。太好了。
我们有 2026,它应该是 Python 的日历版本。是的。被拒绝了。悲伤的表情。我真的很希望 Hugo 做到这一点。而且我真的很希望它能通过,因为我们已经有日历版本了。我们只是将其偏移了 12 年。就像 calendarver 减去 12 就是我们拥有的。那幺我们为什么不直接使用 calendarver 呢?我对此提案不太满意的一点是,它将是 2026 年的 Python 3.26 或什幺,而不是像
就像你知道 23.04 24.0 一样,而不是实际的年份 2025 2026,如果你要使其成为日历版本,请使其非常清晰,就像这意味着年份一样,你知道我的意思吗?不是像哦,如果我正确地解释了,这意味着年份,但无论如何它都被拒绝了,所以是的
你说的是12年,但我认为是11年。我认为是11年。是11年。所以2025减去11是,25减去11是14。我们现在是14。哦,但我们将在今年年底有14。所以。
哦,我的天哪。是的,我想这很有趣。就像它究竟是什么时候发布的?对。是的,因为我,是的,那一定是它,因为我,布雷特·坎农提到你可以通过拨号来计算出来。就像,就像脊椎水龙头一样,把它拨到11。它在年底达到11。是的。在年底。是的。
更重要的是,不是在一年中的80%。所以无论如何,大部分时间。但我仍然喜欢脊椎水龙头的角度。好的,然后……
外部轮子托管。这是另一个高PA的事情。PEP 759已被撤回,它也由Barry Warsaw一起编写,他参与了你刚才谈到的最初的那个,即包装委员会。是的。好吧,这就是我的额外内容。好的。对不起,迈克尔。下次我会跟进你的TPOP。我会记下黄油笔记或登录到正确的网站。笑话?是的。这是你的笑话,但我会在屏幕上为你显示它,好吧,因为我已经把它调出来了。你也调出来了?好的。好吧。
我有的。好的,我们开始吧。所以我们讨论了可能的日历版本控制,通常我们有语义版本控制。但Bruno Rocha发布,最终语义版本控制的一个很好的替代方案是自豪版本控制。
第一个数字是你的骄傲版本。就像,就像2.7点,无论你什么时候为发布感到自豪,你都会增加它。然后在这种情况下,二,二,二到三或其他什么,对吧?中间的那个,比如你从26到27。这是你的默认版本。它只是正常的和好的版本等等。最后一个数字是羞耻版本。
当你修复东西时,你会增加它,你太尴尬了,不好意思承认。你知道吗?我想我可能一直在使用骄傲版本控制。我想我可能已经这样做了。我认为很多人都在使用骄傲版本控制。所以是的,就像,啊,只是一些小修复,无论如何,把它放在最后,然后发布就是你的权利。然后就像一些很棒的事情正在发生。我一直想,它在我的待办事项的后备中,是为了记录随机版本控制,因为我
我认为大多数版本控制方案比他们愿意承认的更随机。是的,我知道。无论如何。非常好。非常好。你知道,这很有趣。我们将此与ZeroVer进行比较。它对ZeroVer项目说了些什么?对。所以这是由Mamamou Hashemi完成的。它谈论的是那些荒谬的项目。是的。
就他们没有发布版本而言,例如React Native在10多年里已经发布了580个版本,但它仍然是零版本。是的。Fast API有203个版本,但它仍然是零版本。像这些人应该有一些自豪感。我认为他们应该为这些项目感到自豪。粗糙?粗糙是零版本?粗糙,是的。Zig,整个语言只在0.13。无论如何。是的。
React OS?天哪。在观众中,克里斯蒂安指出,在我14年后将版本提升到1之后,我感到非常自豪。喜欢它。是的。做得好。做得好。有时你必须工作一段时间,直到你对你正在从事的工作感到非常自豪,但最终你会到达那里。我喜欢这个主意。这太棒了。这是骄傲版本控制。骄傲版本控制。是的,我喜欢它。好吧,感谢你的到来,布莱恩。谢谢。并感谢所有收听节目的听众。回头见。