We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode #404 The Lost Episode

#404 The Lost Episode

2024/10/7
logo of podcast Python Bytes

Python Bytes

AI Deep Dive AI Chapters Transcript
People
B
Brian
Python 开发者和播客主持人,专注于测试和软件开发教育。
M
Michael
帮助医生和高收入专业人士管理财务的金融教育者和播客主持人。
Topics
Brian 详细介绍了 Python 3.13 的新特性,包括改进的 REPL 体验(例如 `exit` 命令的简化使用、多行编辑和历史记录保留、颜色支持等)、改进的错误消息以及对 free-threaded 模式的支持。他还提到了安装过程中需要手动启用 free-threaded 模式。 Michael 讨论了 PEP 759,该提案建议通过外部托管 wheel 文件来解决 PyPI 带宽问题和项目大小限制。他解释了新的 .rim 文件格式,以及为了确保安全性和稳定性而采取的措施,例如强制使用 HTTPS 和校验和。他还介绍了 pytest-freethreaded 插件,该插件用于测试代码在 Python 3.13 的 free-threaded 模式下的线程安全性,以及 pytest-edit 插件,该插件允许在测试失败时直接在编辑器中打开失败的测试代码。

Deep Dive

Chapters
This chapter covers the new features in Python 3.13, including improvements to the REPL, enhanced error messages, and the experimental free-threaded mode. The release was slightly delayed due to performance issues related to the incremental garbage collector.
  • Python 3.13.0 released on October 7th, 2024
  • Improved REPL experience with multiline editing, history preservation, and color support
  • Enhanced error messages providing better context for common issues
  • Experimental free-threaded CPython included in Windows and macOS installers (requires manual activation)
  • Release delayed due to performance issues with incremental GC

Shownotes Transcript

0 您好,欢迎收听 Python Bytes,我们将直接为您带来 Python 新闻和头条新闻。这是第 404 集,录制于 2024 年 10 月 7 日。我是 Michael Kennedy。我是 Brian Ocken。本期节目由 Scout APM 赞助播出。稍后我们会详细介绍他们。链接位于播客播放器节目说明的顶部。Brian,欢迎。

我找了很久这集节目,就是找不到,伙计。就像,我该去哪里找?404。无论我去哪里,都是 404。怎么回事?是啊,我不知道。我们会找到它的。让我们来制作它。

这将是一段旅程。我们将努力完成它。说到旅程,如果您想与我们保持联系,请点击 SETFM,点击时事通讯,在那里输入您的信息。我们会让您随时了解最新情况。Brian 会给您发送一些节目笔记。在 Mastodon 和其他社交平台上找到我们。如果您正在观看视频,甚至可以在这里的 YouTube 上订阅。并且……

说到这里,你今天找到你的第一项了吗?嗯,我差点没找到。好的,第一项,我真的很想介绍 Python 3.13,因为 Python 3.13 于 10 月 7 日发布。而今天是,文字笔记,10 月 7 日。所以是今天,对吧?所以我去了 python.org,然后……

然后,嗯,最新的仍然显示最新版本是 3.12。所以他们正在努力。Thomas Wooters 和其他人。发布它是一个过程,但它实际上已经发布了。所以你只是看不到它。如果你去下载,它仍然显示 3.12。我相信很快就会更新。但是,我们有 3.13.0 的链接。这真的没那么复杂。下载版本 Python-3130。然后你就得到了它。所以它有一个,

呃,3.13.0 的稳定版本。嗯,我今天早上一直在玩这个,玩得很开心。嗯,如果你向下滚动到此链接的底部,那里是安装程序,预构建的安装程序。如果你想获取它们,或者你可以自己安装,或者自己构建。但是我,我现在在 Mac 上。所以我抓取了 Mac 安装程序,我,嗯,我想介绍一些 3.13 中的新内容,但是我,

我真的很想玩多线程的东西,但我还没有。我只是想确保它已启用。

这有点技巧。所以如果你在,也许这里没有,在“新增功能”页面中。所以如果你去“新增功能”,它确实谈到了 Python、Mac OS 和 Windows 安装程序。这里某个地方有一个链接,但我们也会包含链接。当你将其安装在 Mac 上时,当我这样做时,你必须完成这个安装过程。

过程中,你必须点击自定义并点击免费线程,因为 3 个免费免费线程默认情况下是关闭的。所以当你安装它时,你必须打开它。嗯,记住这一点。嗯,我稍后会玩免费线程。那么,3.13 中有什么新内容呢?我认为我们之前已经介绍过这个了,但现在我们实际上有了 3.13,所以我们可以玩它了。嗯,

我们在交互式解释器中进行了更改,实际上让我们稍微退一步。这里甚至没有提到这一点。我最喜欢的 3.13 功能是 exit。

哦,我想是的。它在这里。直接 REPL 支持 help、exit 和 quit。谢谢。谢谢。谢谢。感谢为此工作的人,因为它过去会说,哦,你是想退出吗?你必须输入 exit 加括号或 quit 加括号。如果你知道我想做什么,那就去做吧。

所以,是的,它确实如此。我可以想象有人会说,如果我们有一个名为 exit 的变量,你想查看它的值怎么办?但是如果没有定义变量,那就退出。我喜欢它。所以 exit 和 quit 现在可以工作了。我不知道 quit 是否有效。这很整洁。所以其他一些交互式内容,交互式 REPL 中有很多东西发生了变化。多行编辑。太棒了。

所以你输入多行内容,你会得到,比如三个点,这很棒。但是当你想要去,比如,输入错误,你想去更改它。不,

现在你可以回去,你可以按向上箭头,它可以工作。很棒。所以我真的很喜欢这个。F1 用于命令历史记录。我们之前有历史记录,但是现在如果你退出然后再次启动 REPL,历史记录仍然存在。它保留了你从会话中获得的所有历史记录。当你调试某些东西、尝试它时非常棒。颜色也很棒。所以他们默认启用了颜色。是的。

所以在提示和回溯中。所以即使只是让小提示显示颜色,也很不错。它有帮助。所以喜欢这个。我们还改进了错误消息。以前,如果你命名,比如 random 是内置的,其中一个内置的东西。但是如果你命名一个名为 random 的模块,它就会搞砸。它会说诸如,你知道,模块 random 没有属性之类的话。但现在它说,嘿,你已经……

考虑将你自己的模块重命名为其他名称,因为你搞砸了。所以如果你将模块或脚本命名为与内置模块或你安装的第三方库相同的名称,Python 会告诉你你搞砸了,这很好。还有其他改进,例如,如果你拼写错误关键字参数,它会建议你可能拼写正确。它会建议这一点。这很酷。

然后,当然,3.13 中还有很多变化,但我对 REPL 感到兴奋。我也对错误消息和免费线程 Python 感到兴奋。所以还有很多其他东西,所以请查看“新增功能”。但是,嗯……

我真的很期待玩免费线程。是的,这太棒了。我真的很高兴在这里看到这个。我实际上不敢相信免费线程 Python 是一回事。我知道。就像,已经很久了。我的意思是,我今天早上在散步时看到一只猪从这个人身上飞过。它,它,

它导入了免费线程 Python,而不是。它导入了反重力。它就是这样做的。是的,是的。我知道很多人为此付出了很多努力。所以我期待它。现在,免费线程仍然是官方的实验性功能。所以我

我不知道这意味着什么,如果他们要把它拿回去。请不要把它从我们身边拿走,但我们会看到的。是的,最初接受它的 pep,703 或类似的东西,说,我们允许这样做,但如果它造成太多麻烦,我们会把它拿回去,这是我在 pep 中从未见过的。也许以前发生过,但我们批准了它,但我们可能会取消批准它。可能会取消批准它。我们会把这辆车掉头。如果你继续战斗,我们会把它掉头。是的,没错。别让我把车掉头。别让我靠边停车。

说到靠边停车,这本来应该在一周前发布的,Brian。是的。是的。显然,由于性能问题或增量 GC 的某种问题而被推迟了。对。我会在我的额外内容中添加 Python、discuss.python.org 的链接,但我不会,我不会单独介绍它,但它,

无关紧要。事情现在已经出来了。但是,非常酷。好吧。那么,你接下来还有什么,Michael?好吧,让我们坚持一些核心语言主题和类似的东西。我想谈谈 PyPI 基线。

PEP 759 外部轮子托管中的带宽。所以现在,当你 pip install、UV pip install、无论什么时,你都会去获取一些东西,而你作为包发布者(例如 Flask),会将其发送到 IP.org,可能是作为轮子,也可能是作为不同轮子的多平台变体,如果它必须以不同的方式编译的话。然后人们 pip install 它,它会从那里下载。

这导致了大量的流量。实际上,我稍后想更多地谈谈这个问题。但这是一个惊人的流量,每月超过 66 PB,这是六位数级别的带宽成本。幸运的是,CDN 公司 Fastly 基本上正在以相当高的成本捐赠所有这些带宽。可能与零售价格不同,但无论批发带宽是多少,我相信它仍然很多。

他们在 PyCon 上宣布了五年计划或五年承诺给 PSF。好吧,他们在大型主题演讲舞台上。这很好。谢谢,Fastly。但是,即使他们覆盖了它,仍然存在问题。如果 Fastly 最终改变主意怎么办?但更重要的是,对你的项目在 PyPI.org 上的总体使用情况有严格的限制。它没有单个包可以大于 100 MB,并且你不能在所有平台上、所有版本中总共拥有 10 GB,诸如此类,对吧?你不能申请例外,但这并不好。如果你可以说,

这是我的轮子,但是当你实际下载它时,从那里下载它。如果它是 Microsoft 包,则从 Microsoft.com 下载它,或者如果它是某种空间包,则从 Explosion.ai 下载它。这些东西必须相当大,你 pip install 的很多模型。我认为他们必须获得例外才能上传。好吧,这就是这个的意义所在。它是 Barry Warsaw、Ethan Smith 编写的。

代表是 Donald Stuft,他主要负责 PyPI.org 的重写。所以事情是这样的,Brian,如果你有一个轮子,它是关于包的元数据以及它的所有二进制细节、源代码等等,并且你剥离了很多轮子内容,比如二进制位,你会剩下什么?我不知道。一个 RIM。一个 RIM。

一个真正的轮辋,你知道吗?哦。所以这个 pep 定义了,这个 pep 实际上定义了一种新的包格式,称为 rim 文件。rim 文件基本上是缺少二进制文件的轮子。相反,它有一个指向二进制文件所在位置的 URL 和二进制文件的校验和,该校验和可能已经存在,但如果没有添加到它,则将其保留在 rim 文件中。好的。有趣。所以基本上,如果你想参与其中,你只需要上传元数据,然后指向其他地方。是的。

有很多动机,他们尝试过的事情,没有成功的事情,限制。你可以在这个 pep 中看到,他们列出了我提到的限制以及所有细节。但最重要的是,有一个安全部分。

部分在这里。我担心这一点。所以是的。是的。这里。以及稳定性约束。例如,轮子校验和必须包含在 RIM 文件中。一旦上传,就像当前的轮子一样,它就不能更改。是的。所以这是我的元数据。这就是东西所在的位置。这是它的哈希值。所以它不能被篡改。它必须通过 HTTPS 提供服务。好的。并且你

只有在你获得 PyPI 管理员的预先批准后才能这样做。所以这不仅仅是一团糟。人们只是到处上传东西。好吧。但是对恶意软件之类的东西有很多考虑。还有一些关于稳定性的东西,比如外部轮子必须通过 SSL 托管,而且不仅仅是那样,它实际上必须由 Mozilla 的根证书存储签名,这很有趣。他们有,他们应该使用 CDN。它们必须稳定,等等。你怎么看?是的。

那么谁会这样做呢?我的意思是,因为然后这样做的人必须支付托管费用。或者把它放在 GitHub 上,并将其指向为原始文件或其他什么,你知道吗?哦,是的。类似的东西。我不知道。哦,好的。或者如果你是一家大公司,并且你想发布 ML 模型,并且你更愿意控制它以及它的工作方式,你可以

你可以设置它。我认为小型个人不会说,嘿,我很乐意每月无缘无故地支付 1 TB 带宽费用。是的。对。好吧,就像你说的那样,它,嗯,它,嗯,它将是一个大型的。你不会仅仅为了一个小管道这样做。

仅限 Python 的包。是的,没错。这是非常不可能的。对。这是非常不可能的。所以他们说这只是关于托管二进制下载,而不是包、包索引、包列表,因为这些已经通过拥有单独的私有白标得到支持。你自己运行

我觉得现在很多人对AI都感到疲劳了。我想,这只是我自己的感觉吗?还是说,这是真的?所以在Faucet和Twitter上,我发帖问大家对LLM主题的看法,以及是否愿意花时间讨论这些主题。只有4%的人说想要更多LLM内容,22%的人说还可以,38%的人说已经听够了,还有36%的人说,如果你再提一次AI,我就把你按在地上摩擦。是的。

哦,你刚才已经说了四次了。哦,不。这会很痛,但我不得不提,但已经有74%的人说,伙计,我已经受够了。是的。所以,无论如何,一件有趣的事情是,如果你加上,“如果你想让我们开始再次讨论区块链”。哦,我的天哪。没错。这肯定会奏效的。好吧。呃,

这里还有两个快速的消息。JetBrains和PSF现在已经发布或开放了2024年Python开发者调查。所以请查看一下。我会链接到你可以去参加的地方。但是每个人都参与进来。这非常重要。我们非常重视我们在春季获得的所有信息,或者每当我们获得答案、回复和报告时。但现在是时候开始了。

提交你的笔记。好的,还有几件很快的事情。我在TalkPython上添加了一种非常酷的方式来浏览课程。这里顶部有一个很大的标签云。通常你会看到所有的课程。但是现在,如果你只是点击一下,比如你想找到关于测试的东西,对吧?我只是点击测试。它会显示你的测试课程。这个东西非常棒。这一切都是用HTMX实现的。都是动态的。没有页面刷新,但没有JavaScript。我喜欢它。酷。

无论如何,去看看吧。最后一个额外内容,我写了一篇文章,说的是,让我们对PyPI温柔一点,好吗?我从更新的人那里得到了一些不错的反馈,但基本上它谈论的是你可以采取的许多不同的步骤……

不要让这个数字每月达到66PB,击中pympi.org,对吧?我不知道你感觉如何,但我认为其中75%或更多必须是Docker构建、持续集成,所有这些垃圾,对吧?这只是……

它一定非常过分,就像机器与机器对话一样,“嘿,这是一个包含200个东西的需求文件。我们将在其上构建一个Docker容器。所以让我们从这个基础版本开始,比如Python版本或任何一个版本,这并不重要。并且每次你想要发布或测试任何代码更改时,都会从它构建。它会一遍又一遍地下载所有200个,对吧?是的。然后你用多个版本的Python测试它,所以它下载的次数更多。这是一个很好的观点。是的。所以这篇文章指导你不同的步骤,你可以采取缓存它一遍又一遍更快。所以基本上,除非需求改变,否则它永远不会,永远不会接触PyPI.org。对吧?对。

所以它一开始只是说,哦,是的,你只是pip install你的需求。有什么问题吗?每次代码更改都会导致下载。然后也许你可以运行需求,只复制需求文件并首先运行它,然后执行它。这样,只有当需求发生变化时,才会执行它们。

然后你可以预先列出一些顶级需求。这将把它缓存到Docker镜像中。然后在与许多人进行了大量讨论之后,有一个mount命令,你可以为缓存说。

基于每个命令。这会将输出缓存到构建Docker容器的机器上的某个位置。所以它会缓存UV或pip缓存。这样,如果你再次获得它,它将只使用缓存版本,即使它是一个全新的镜像,只要机器看到它。

之前下载的依赖项,对吧?然后最后,如果你可能是在GitHub上最大的罪魁祸首之一,在GitHub上,他们实际上有这个东西,也许你知道它,这个叫做

一个缓存操作或操作/缓存,你可以为你的CI设置一个缓存,这样后续的CI构建就不会再次下载和安装它。这不仅会减轻PyPI的负担,而且所有这些都会使它对你来说更快,所以激励是一致的。你知道我的意思吗?是的。这很酷。几乎太糟糕了,就像

GitHub本身无法注意到多个包或来自不同项目的多个构建正在使用相同版本的某些东西并缓存它。对,只需拥有一个通用的pip缓存或类似的东西。我的一个问题是,我不知道你是否知道这个问题的答案,我知道UV做了很多缓存。仅仅使用UV是否有助于减少对

IPI的冲击?这是一个有趣的问题。我不知道它是否会减少流量。它肯定会让它更快。对此毫无疑问。但它可能是相同的流量。好的。是的。酷。好吧。亨利说setup-uv有一个缓存选项。很高兴听到这个消息。好吧。然后Jay Miller插话说,他认为他找不到这一集。但和我们一样,他最终找到了自己的路。

还有,观众中的托尼说,我一边听一边在做缓存和CI的工作。

UV也支持在CI中缓存。顺便说一句,如果你正在查看GitHub CI内容的这些笔记,这里有pip示例,某个地方,pip,你在吗?如果你只是说这个.cache/pip补丁,如果你只是把它改成.cache/UV,我很确定其他一切都会从那里流出。太棒了。好。确实。好吧。好吧。

准备好一个,好吧,我希望你没有忘记笑话。所以让我们看看我能不能找到它。让我们看看我能找到什么。好吧。

所以,你知道,当你访问一个不好的页面时,比如如果你访问Python Bytes/blah,blah,blah,它不存在,它应该只显示404吗?不,你应该有一些有趣的东西。比如我们,我们在舞台上有一个很大的空麦克风,没有人拿着麦克风,上面写着404,试试我们的剧集列表。相反,你可以点击它,它会带你到我们的剧集,对吧?这很有趣。所以我的笑话,我想我会让大家链接到它,但也许我们可以找到一两个来让大家感受一下,是……

28个聪明而有趣的404页面。我喜欢这个。这些太好了。它几乎让我想要弄乱一个网站,只是为了看看他们有什么,对吧?其中一个是Blue Path。我不知道那是什么,但有一张很大的地图,上面有很多小点,比如,这是所有其他地方,以及人们居住在城市周围的地方或正在发生的事情。它说,这是其他人。然后在其他地方,它有一个小点,上面写着,这是你,远离地图。请去寻找……

有些不太好,但有些非常好。无论如何,如果这种东西让你觉得有趣,皮克斯有一个哭泣的里外反转的人。它是悲伤的情绪。是的,没错。其他的只是很奇怪。一个穿着金色404球衣的熊。无论如何,看看吧。乐高有一个未组装的、断开的类似的东西。是的。

所以我认为这对于我们的第404集来说会很好。人们可以浏览它并享受它。是的。而且,我喜欢观看,查看这些。所以如果任何人有一些他们想与我们分享的好404页面,请前往Mastodon或我们的节目笔记页面,并向我们发送你最喜欢的404的链接。那会很有趣。是的。太棒了。好吧。

好吧,伙计们。谢谢大家收听。布莱恩,感谢你一直在这里。谢谢。回头见。再见。