您好,欢迎收听Python Bytes播客,我们将直接为您带来Python新闻和头条。这是2025年6月2日录制的第434集。我是Michael Kennedy,我是Brian Okken。我很高兴地告诉大家,本期节目由DigitalOcean赞助。他们显然有很多很棒的服务器,还有一些非常酷的生成式AI功能,我们也希望告诉大家。所以我们稍后会告诉大家。节目说明中有一个包含200美元信用额度的链接。所以这里没有剧透。如果您想在各种社交平台上与我们交谈,告诉我们我们可能想涵盖的内容,给我们提供反馈。如果
我们的Mastodon和Blue Sky账号链接也在节目说明的顶部。您现在就可以在YouTube上与我们一起直播,几乎每周一上午10点,除非有什么事情打乱了日程安排,但我们尽量在太平洋时间周一上午10点进行直播。所有旧的剧集也都在那里。最后,如果您想收到Brian精心制作的特别电子邮件,其中包含有关节目中发生的事情的额外信息,
那么,请注册我们的邮件列表。Brian,有些人说他们一直无法收到电子邮件。例如,他们注册了,但没有收到。是的。是的。那是因为互联网上有很多混蛋,他们让像电子邮件这样好的东西很难正常工作。所以,就像,
这么多的垃圾邮件过滤器和其他东西,我已经做了一些修改。我认为一些注册的人可能会再次开始收到电子邮件。但基本上,他们的电子邮件提供商一直在说,嘿,你正在从一个以前发送过垃圾邮件的IP地址发送邮件,被阻止了。
好吧,我们使用SendGrid。SendGrid只是让我们通过许多不同的IP地址进行轮询。如果我们碰巧得到一个以前被标记的IP地址,那么你可能会从邮件列表中退订。这有多有趣?所以我做了很多幕后编码来尝试限制这些影响,并在下次再次发送,因为它将是一个不同的IP地址。啊,混蛋。所以这就是垃圾邮件发送者。是的,谢谢。
我想就这样,我们准备开始了。你有什么?好吧,我一直在加快一些测试套件的速度。所以我对trailofbits.blog上的这篇博文很感兴趣。这是一个Trail of Bits博客。我认为我们以前也报道过他们的一些内容,但无论如何。是的,他们通常是一家安全公司。他们对许多安全问题进行非常有趣的调查研究。哦,真的?好的。是的。
显然,他们从事的工作之一,或者至少他们正在撰写的是,是的,它说Trail of Bits几年前与PyPI合作,增加了功能并改进了Python生态系统中的安全默认设置。但是他们今天也会关注整体软件安全测试套件性能的同样关键的方面
整体软件安全测试套件性能。因此,有一些努力来加快测试套件的速度,这令人难以置信。我报道这个原因之一是加快测试套件的速度,但我也经常收到关于PyTest是否的问题
足够强大到可以测试大型系统。是的,它是。实际上,我甚至不认为我,我的意思是,仓库是一个相当大的规模。显然,他们目前的或测试套件在撰写本文时是3D。
4700个测试用例。测试用例数为4700个。相当多的测试。嗯,仓库错误由PI,嗯,在博客文章中有一个很好的图表显示,嗯,花费的时间。所以他们从163秒开始。那是多少,嗯,两分钟,嗯,
我不知道,大约两分半,三分钟。是的,将近三分钟,将近三分钟,降至30秒。这是一个很好的加速。嗯,即使测试数量在增加,花费的时间也在减少。他们是怎么做到的?嗯,性能改进的大部分是切换到PyTest Xdist。所以Xdist是PyTest团队,核心团队,或者至少是维护它的团队的一个插件。那是,嗯,嗯,
减少了67%,它允许您在多个核心上运行它。所以,我认为在这个例子中,他们有一台32核的机器,他们可以使用多进程来运行它。是的,线程,对吧?是的,是的,它是多进程的。是的,我认为有一些配置可以调整。但大多数情况下,它是多进程的。
所以这样做有一些开销。因此,您不会想要尝试使用测试套件来加速一个已经非常快速的小型
测试套件将使用Xtest变慢。无论如何,这是一个更大的测试套件。但是有一些真正的,我喜欢的一件事是,因为它不是Xtest的免费午餐,因为将测试套件分解成这样并不总是容易的。所以他们谈论的是并行化,并行化测试执行。
您可以简单地说num process等于auto或-n等于auto,这就会在一堆核心上运行它。如果您有共享资源(如数据库),它实际上并不起作用。因此,他们还讨论了设置数据库夹具,以便每个测试
每个测试工作程序,测试工作程序获得它自己的隔离数据库。所以他们展示了一些关于如何做到这一点的代码。但这是开源代码,所以如果您愿意,您可以查看整个代码。您从XDIST获得的另一件事是非常简单的报告。因此,他们使用PyTest Sugar提高了可读性。我不经常使用PyTest Sugar,但是它
它确实很流行,它会给你一些复选标记。但它所做的一件事是使Xdist,嗯,更加冗长,但它,嗯,它是一种很好的绿色到绿色的复选标记。所以有一个很好的,感觉很好。它比小点好。嗯,无论如何,这是一个巨大的改进,嗯,使用Xdist,但这,嗯,这还不是全部。Python 3.12,嗯,增加了能力,为,嗯,覆盖率高,运行速度更快,使用,嗯,
通过使用Sysmonitoring模块,NetBatch Elder很久以前就实现了这一点。因此,他们使用coverage core环境变量将其打开,这也加快了速度。另一个53%的时间减少。然后是测试发现阶段。这是一个简单的阶段。没有增加太多时间,但这只是,每个人都应该这样做。这是一行配置,说明我的测试在哪里?所以,
这是一个很好的阶段。嗯,然后是,嗯,不必要的导入开销。这是一件有趣的事情,我想,他们是怎么做到的?嗯,通过测试,他们使用一个叫做DD trace的东西。这是通过,DD trace通过DataDog,嗯,库,但是,什么,什么,我不知道它到底是什么。我,嗯,
但我刚刚查看了它。我想,他们是怎么?我查看了拉取请求以查看他们是如何做到的,他们使用了一个标志-P,它允许您打开或关闭测试套件中的插件。DDTrace看起来不像是一个PyTest插件,但它确实有一个。所以我查看了一下。DDTrace带有一些PyTest插件,所以那些插件会引入是有道理的
当那些插件被读取时,DD trace。无论如何,这是一个有趣的旁注。但关于如何加快测试套件速度的阅读非常有趣。这提醒我,我确实需要,我还有一些技巧。我想我需要开始一篇关于如何加快测试套件速度的文章或一系列文章。是的,这非常有趣。好东西。是的。是的。
无论如何,我实际上我的下一个主题,我们稍后在本期节目中讨论的下一个主题也将围绕加快测试速度。好的。好吧,本周都是关于速度的。速度。测试速度。好的。这个非常有趣。所以我遇到了……
我甚至没有看到这个。我不在X上花费那么多时间。不一定是因為我对X有什么怨恨。虽然从我们对……的评论中你可以知道这一点……我认为是在Doc Bytheon上。有人绝对像……一样……正在经历一个时刻。因为我说,嘿,Mastodon很酷。他们就像,哦,我的天哪。无论如何。不,我不在那里花费太多时间,因为我只是觉得……
就像,我觉得算法只是隐藏了我的东西,我没有得到任何真正的对话或参与。所以,也就是说,我偶然发现了这个非常有趣的东西,来自Pietro Charano。它说,人们对……说得不够多……
OpenAI(又名ChatGPT)的大部分技术栈都运行在Python上,并且有一个关于它的新闻通讯截图,好的,技术栈,这非常有趣,Python,大部分产品的代码都是用Python编写的。框架FastAPI,用于快速构建API的Python框架,使用标准的Python类型提示和Pydantic
谈论它。C,对于需要高度优化的代码部分,团队使用较低级别的C编程语言。然后是用于异步工作流和OpenAI内部操作的Temporal。Temporal是一个简洁的工作流解决方案,即使各个步骤崩溃,也能使多步骤工作流保持可靠,而开发人员无需付出太多努力。我实际上不知道Temporal是什么。也许它是Python。它可能是。听起来像是。提醒我一下,这是OpenAI的技术栈吗?是的。好的。
做了一些搜索,我找到了原始文章。而且,这来自围绕构建ChatGPT图像的对话,图像生成的东西,或者你说,给我制作一个关于我一直在谈论的内容的信息图,或者其他什么,这在今天令人难以置信。所以这篇文章的标题是构建、启动和扩展ChatGPT图像。这是OpenAI最大规模的发布,在一周内新增一亿用户,生成了7亿张图像。
周。但它是如何构建的呢?让我们谈谈Python,对吧?所以是Python、FastAPI、C和Temporal。这有多酷?对于那些说,好吧,使用Python进行这些玩具项目很有趣,但对于不构建真实事物的人来说,这是一种不严肃的语言的人来说。还是?一周内新增一亿用户。这太史诗般了。FastAPI做得很好。做得很好,
新版本的Python,所有这些东西。我必须知道,什么是Temporal?这就是它吗?可能,它甚至可能不是一个,你知道的,持久执行。这是用Go编写的,所以显然Temporal可能不是。无论如何,这难道不有趣吗?拥有一个数据点总是很有趣的。是的,我喜欢这个。我认为有很多我们甚至不知道的事情,人们没有谈论是用Python和FastAPI编写的。所以这是一个不同的世界。嗯哼。对观众来说很好。DigitalOcean。DigitalOcean很棒。是的,DigitalOcean为
Python Bytes提供动力已经很长时间了。我喜欢DigitalOcean。我强烈推荐他们。但是你有一些特别要说的话,不是吗?是的。本期Python Bytes由……赞助。
DigitalOcean。DigitalOcean是一个全面的云基础设施,即使对于最复杂的工作负载也很容易启动。而且它的价值比大多数云提供商都要高得多。在DigitalOcean,公司可以节省高达30%的云账单。DigitalOcean拥有99.99%的正常运行时间SLA和业界领先的带宽定价。它旨在成为大小企业的云骨干。
并且使用GPU驱动的虚拟机以及存储、数据库和网络功能,所有这些都位于一个平台上,AI开发人员可以自信地创建用户喜欢的应用程序。开发人员可以访问他们训练和推理所需的全套基础设施工具,因此他们可以构建他们梦想中的任何东西。DigitalOcean提供全面的云基础设施,易于使用,无论
用例如何,都具有可靠性,可扩展到任何规模的业务,并且在任何预算下都价格合理。虚拟机起价仅为每月4美元,GPU每小时不到1美元。易于启动的基础设施,旨在简化即使是最严格的业务需求。这就是DigitalOcean。如果您使用DO4bytes,您可以获得200美元的免费信用额度来开始使用。深呼吸。DigitalOcean。
DigitalOcean是您值得信赖的云。在查看他们的优惠时,请使用我们的链接。您可以在播客播放器节目说明中找到它。当您听到本段时,它是一个可点击的章节URL,它位于pythonbytes.fm的剧集页面顶部。感谢DigitalOcean对Python Bytes的支持。确实。非常感谢。好吧,让我们看看接下来有什么,Brian。好的。
PyCon。我们今年都没有参加PyCon,是吗?太糟糕了。但是,你知道,c'est la vie。有时就是这样。而且我认为大多数收听本节目的听众都没有参加。因为如果所有收听本节目的听众都参加了PyCon,它将被售罄很多次。所以这意味着大多数听众都非常兴奋地知道他们现在可以观看这些演讲。大多数。其中40个演讲有一些问题,但是有
有很多,有多少,120个演讲在这里在线观看。所以我链接到PyCon视频的播放列表,这很酷。这比上次出来得快得多。上次要等几个月他们才会发布这些视频,这很不幸。但是,你知道,这就像会议后一周左右。所以这真的很好。是的。
这令人难以置信的速度。是的。是的,是的,是的。我列出了一些我想强调的内容。浏览播放列表太难了,所以我只想读出我喜欢的内容。所以我发现Cory Doctorow的主旨演讲非常有趣。它基本上是如何,就像,深入探讨他一直在谈论的整个“信息化”的东西,这是一个非常非常有趣的想法。因为戴着口罩有点难以听到,但是,你知道,没关系。
仍然值得一听。有一个演讲,题为“503天全职从事FOSS工作:经验教训”,听起来非常有趣。有一个演讲
有一个演讲题为“从笔记本到可扩展系统”,演讲者是Catherine Nelson。我刚刚在TalkPython上采访了她。对于所有这些,我都在节目说明中链接了它们。当我提到“在TalkPython上”时,我也链接到了那一集或视频,因为她的演讲还没有发布。它只是提前录制好的。“忘记SQL”。这听起来不有趣吗?就像大多数人都在努力学习SQL一样。我为什么要忘记它?
历史上最奇特的软件错误。这很有趣。Pandas中的PyArrow革命。我也和Reuven Lerner一起做了一集关于这个的节目。Brant Booker没有告诉你关于为CPython构建JIT编译器的事情,我也在Doc Python中谈到了这个,并且链接到了这个。这个很酷。嗯,来自Henik的“设计压力:塑造你代码的无形之手”。他有一些非常有趣的架构理念。所以超级酷。
Marimo,一个为可重复性和可重用性“编译”Python的笔记本。我在一集节目中谈到了这个。纯Python中的GPU编程。我在一集节目中谈到了这个。最后是“攀登高峰:解决大规模技术债务的框架”。
大规模技术债务。这看起来很有趣。所有这些演讲听起来都不超级有趣吗?是的。是的。所以我链接了所有这些。我列出了它们。你们如果愿意可以查看它们。它们在节目说明中。“历史上最奇特的软件错误”。完全是点击诱饵,但我今天下午会观看它。我有它。没错。我迫不及待地想看。是的,不,这很有趣。好的,轮到你了。好的。这个标题很有趣,但是目录展开。无论如何,我
我只是想找到一些文章来谈论这个,因为它是我用来加快测试套件速度的一种技术。在上一篇文章中我们没有讨论过。所以优化Python导入性能。所以在之前的讨论中,我们谈到了删除,在PyTest中使用-P来删除可能删除不需要的东西的导入的插件。但是如果你确实需要怎么办
但并非一直如此。所以我想谈论的一件事是这个测试收集。所以就像另一个一样,他们使用了Python -X import time,你通过运行来使用它,就像你可以运行你的应用程序或者你可以之后运行PyTest,你可以找出,它打印出一个列表
这自Python 3.7以来就存在了,我认为,但是它,它打印出所有导入的列表以及导入它们花费了多长时间。它有点难以解析,嗯,因为它是一种树状结构,但是,嗯,还不错。嗯,嗯,
你可以尝试找出哪些是慢的。所以其中一种技术是延迟导入。这是一个关于Python的奇怪特性,直到最近我才了解到,那就是当你导入某些东西时,通常我们将导入放在文件的顶部,但是当你导入一个模块时,它也会导入该模块导入的所有内容。所以如果你不,如果你的依赖项不是你逻辑的一部分,
如果它的用户不需要导入那些东西,就像只是为了导入,你可以将那个导入隐藏在一个函数中,它仍然在全局范围内起作用。所以在这个例子中,它说process_data导入pandas as PD。只有在函数运行时才会导入它。但即使在该函数之后,pandas也对其他所有内容可用。一种奇怪的特性,但它效果很好。我
我将立即将其与测试联系起来,测试,测试收集,在测试收集时,pytest会导入所有内容。所以如果你不,你可能不需要在收集时导入任何依赖项,所以我隐藏了很多,我查找任何昂贵的导入并将它们移动到一个夹具中,通常是一个模块级别的auto use夹具,以使该导入仅在测试运行时运行,
而不是在进行收集时。这是一个重要的技巧。避免循环导入。所以我只是认为,所以希望你已经这样做了,但是它说循环导入迫使Python处理不完整的模块。它们会减慢执行速度并导致错误。好吧,我知道它们会导致错误。我不知道它们会导致错误。
我不理解只是减慢执行速度的部分。所以可能有一种方法,就像可能有一些合法的循环,循环,但是摆脱它们。这很奇怪。它有时确实必须,你必须重构你的代码。第三件事是保持dunder和它非常轻量级。这对pytest测试之类的东西来说是一个难题,因为我们,有时我倾向于将东西塞进dunder和它,
尤其是在导入所有内容的情况下,但要尽可能保持这些dunder和init文件干净快速。这篇文章中还有其他内容,但这些是我真正关注的三个方面,以尝试加快测试套件的速度,清理导入时间。是的,这真的很酷。你可能会想,好吧,什么是慢的?什么是快的?你怎么知道?
好吧,有一些工具可以导入配置文件导入。我们以前谈到过它们。我不记得我们介绍了哪一个,但是有一个叫做import_profile的工具。酷,我在找这个。很好,谢谢。是的,所以你可以简单地说运行我的代码-import profile,然后你可以给出你……
你将要导入的内容,它会给你一个很好的时间安排。可能很多都很慢,你浪费了精力去尝试优化这些东西。但有些很快。我的意思是,有些并不快,有些使用了很多内存等等。所以看到这一切是如何工作的实际上非常有趣,对吧?是的。实际上,所以当我最近为一个大型测试套件进行一些优化时,我
你必须测量,因为有一些相当大的包,我只是假设它们会很慢,但是它们已经优化了它们的导入系统。所以那些那些看起来很大的包,比如pandas之类的,实际上可能很快。但是看起来在这个例子中不是,但是像NumPy,它做了很多事情,但是
但是它是一个相当快的导入,所以是的,很有趣
它也取决于,你知道,你是如何,你每个进程只导入一次,对吧?就像,它不会被一遍又一遍地导入。所以如果它是100毫秒,是否值得担心?也许,也许不值得。而且还包括丢弃东西,例如,例如假设你拥有,所以通常在测试需求或开发需求文件中,或者在你的测试需求中,可能有一些,
所以我经常查看两组东西。有一些PyTest插件对开发人员在本地运行很有用,但它们在CI中并不真正需要。所以你可以在CI中将它们删除。然后反过来,就像在CI中,我们经常有,我经常有像报告系统一样的东西。我可能会将所有数据导出到数据库,并使用一些插件来处理它。
这在本地不需要,所以在本地关闭它们,这样你就可以有一个更快的运行速度,诸如此类的事情,无论如何,加快测试速度是一件好事,是的,绝对是,好的,额外的你有什么额外的我有一些,是的,所以我有几个,你首先说吧,我也有几个,好的,这个很快,嗯,这是来自Hugo的PEPs和Co.关于PEP从何而来的一个小历史,我一直在使用它,就像你
使用这个词一样。但显然Barry Warsaw想出了这个首字母缩写,他称之为反向首字母缩写。他喜欢PEP的声音,因为它在想出Python增强提案首字母缩写之前很活泼。所以这是一件有趣的事情。但这也说明了从那时起,在不同的地方有很多改进提案和增强提案之类的首字母缩写
不同的社区。这很有趣,例如Astro Py的增强提案。你完全知道他们故意反转这些,这样他们就可以制作APE。太棒了。嗯,只是一些乐趣。第二个是python-test.com。我的博客焕然一新。它有浅色和深色模式,但颜色更丰富。现在它也让我非常清楚地知道,我没有像我希望的那样经常写博客。第四旧的文章来自Janice。
2024年1月。哎呀。必须继续努力。但我喜欢它的一件很酷的事情是,部分原因是我不太喜欢我的主题,所以我并没有经常写博客。所以我认为我更喜欢它。希望我会的。它还在使用Hugo还是运行在什么上面?是的,它是Hugo,而且,我甚至不知道,它是一个基于JavaScript的搜索工具。而且它非常快速。这都是,我不知道。
我喜欢这个。是的,非常酷。其中一个,是什么?我打算,有一个更改,我希望也许可能会更改的是,代码突出显示的浅色模式看起来不错,但在深色模式下有点难以阅读。我不知道,黑色背景上的红色。哦,是的,是的,是的。你可能可以用一些CSS操作来更改它。可能。是的。无论如何,这些是我的额外内容。你呢?哦,是的,非常好。我有一些。太棒了。
只是快速跟进你的额外内容。我正在做一个关于Python历史故事的,就像多年来的小组讨论一样,Barry Warsaw将在6号参加,那是几天,星期四,诸如此类的事情。好的。
好的。是的,那个PEP故事。我想让他谈谈这个。所以我的额外内容,这个当然可以成为一个完整的项目,但我没有足够的经验。我真的不知道。但事情是这样的。所以你可以有一些SAS错误系统,可能是JIRA。每个人都喜欢JIRA。
或者可能是GitHub问题,或者可能是其他东西。但是如果你只想得到一些低调的东西,你知道它会直接与你的项目一起出现,Git已经是分布式的。所以有这个东西叫做Git bug,好的?这个想法是这样的,这是一个分布式的离线独立问题管理工具,它嵌入问题、评论等等
作为对象放入侧面,您可以获得存储库。因此,当您获得克隆时,您只需获得问题。当您获得拉取时,您会更新您的问题。哦,酷。有趣,对吧?它带有一些UI。我还没怎么玩过它。一个CLI,一个2E,或者甚至一个基于此可以运行的网络浏览器。所以这很整洁。然后关于它会根据您的需要与GitHub问题等同步,或者使用称为Bridges的东西的GitLab。
我认为这实际上很酷。我不知道它是如何工作的,但它似乎很酷。是的。但我根本没有使用它,也没有兴趣使用它,因为对我来说,我的所有东西都在GitHub上。我只会使用GitHub问题。这很好。但我可以看到某些用例。这将非常整洁。我还有什么?上周的后续行动。这是我们的脸,但这只是
这是尼尔·米切尔说的。还记得我们讨论过Pyrefly,Meta的新类型linter,类似于mypy的东西吗?是的。我说,哦,是的,它有点像TY或以前Astral的Redknot。我说,哦,但是Astral有这个LSP。我们从尼尔的节目中得到了一个很好的评论。它说,嘿,来自Pyrefly团队的人,感谢您关注我们的项目。我们确实有一个LSP IDE优先,并且LSP
现在大约是同义词。我们正在探索是否可以将其添加到PyLance中。所以Pyrefly比我给他们的评价更多。非常酷。是的。是的。还有什么?我想就是这样。你准备好讲笑话了吗?IDE和LSP是同义词?我认为自动完成功能,使IDE不仅仅是基本编辑器的功能。好的。像转到定义、重构、查找用法等等。我认为这就是他的意思。好的。是的。
是的。我的意思是,我不会仅仅从命令提示符启动PowerFly。我需要编辑这封电子邮件。让我启动一个LSP。是的,就是这样。但我认为这就是他的意思。就像IDE的功能基本上只是LSP的后端或前端。
好了,你准备好讲笑话了吗?你很好地完成了整个体验的循环。所以我也会这样做,就像你的PyTest等等一样。所以看看这个。我们所有程序员现在肯定都知道,AI工具擅长编写代码,这将对我们产生某种改变。
对我们来说以某种方式,对吧?我们中的一些人担心,你知道,这可能是结束。所以笑话是有两个程序员,他们超级,他们就像要被吊死一样,对吧?就像非常非常激烈。它说程序员担心chat GPT。然后他们看着另一个人。他也说,在计算器发明后幸存下来的数学家。看起来是第一次,是吗?是的。
这很好,对吧?是的。这非常好。是的。我想知道这张图片是不是用chat GPT制作的,这将是它的甜味酱。可能不是,但它可能来自我从未看过的电影。是的,可能。也许。是的。第一次。数学家们幸存下来了。是的。天哪。我们,
显示我的年龄,但我仍然记得我所有的数学老师都说,你必须学习如何手工做这件事,因为你不会每天都带着计算器到处跑。是的,你不会,是吗?等等。好吧,你知道,也许。也许。也许你足够拿着你的手机。是的,我会的。或者你的手表或其他什么。是的,我的孩子奇怪地擅长用她的手机指着任何东西,比如数学题,然后得到答案。她用它来检查她的工作,我认为这很好。
至少这是说法。是的。但是我们生活在一个令人惊叹的时代,也是一个有趣的时代,正如诅咒/引语所说。是的。我必须阅读评论才能弄清楚异步和香蕉套装是什么意思。哦,是的。有一件香蕉套装。Python上的一个视频。是的。是的。Henny在那里指出,从一些演讲中挑选出一些演讲,我还认为一个有趣的演讲是关于
Pablo Galindo、Salgatos和Yuri Selvanov。谈论异步和穿着香蕉服装尤其有趣。还有什么比这更好的呢?好。做得好,伙计们。是的。非常好。感谢您的光临,Brian。感谢大家收听。再见。再见。再见。