您好,欢迎收听 Python Bytes,我们将直接为您带来 Python 新闻和头条新闻。这是第 435 集,录制于 2025 年 6 月 9 日。我是 Brian Ocken。我是 Michael Kennedy。本期节目由我们赞助。因此,请查看 Talk Python Training 上的所有精彩课程,以及在 Python 中学习 PyTest 的许多不同选择。
python test.com。嗯,所以请查看一下。还要感谢我们的赞助支持者。他们已经坚持了很长时间,我们非常感谢他们。如果您想稍后与我们更多地联系此事,但如果您想与我们联系,请查看节目说明中的链接,到蓝天和 mastodon 的链接都在那里,如果您想加入我们的直播,您可以前往 pythonbytes.fm/live,它会向您展示如何操作。顶部有一个链接。这真的很容易。然后,当您收听并想查看我们讨论的所有很酷的事情,但不想记下来时,不用担心。只需注册成为时事通讯的一部分,我们就会直接将其发送到您的收件箱。有了这个,
迈克尔,你有什么很酷的东西要给我们吗?我有。我有一些我想谈论的东西。这是我对之前谈论过的事情的更新,但这可能是六年前的事了。我不记得我们什么时候介绍过这个,而且由于某种原因,我没有进行搜索。所以事情是这样的。您正在编写一个应用程序,并且正在做这样的事情:嘿,我需要让我的应用程序
保存文件中的某些内容。我不希望用户访问它。我希望我的应用程序能够访问它。仅此而已。就像一个 SQLite 数据库文件,对吧?这不是用户应该追踪的东西。您不希望将其放在 Windows 上的“我的文档”中,也不希望将其放在 Mac 或 Linux 上的用户配置文件中的某个位置,对吧?您只需要将其保存在某个地方。它需要与用户关联。他们需要在那里拥有权限。所以我之前谈到过
关于 appdirs,appdirs 包,一个小型 Python 模块,用于确定合适的特定于平台的目录,例如用户目录或类似的东西,对吧?那么您的配置在哪里?您的缓存目录在哪里?所以在 macOS 上,就像波浪线/大写库,大写 L 库。
缓存,然后您可能使用应用程序名称,诸如此类的东西,对吧?您想访问它并将东西放在那里。这让我抓狂。布莱恩,我去我的用户资料。如果我想查看隐藏文件,我的用户资料中有很多点这个应用程序点那个应用程序设置。它们不是为我准备的。它们之所以存在,通常是因为这些应用程序的设计者太懒了。
太懒了,无法将其放在该平台上的适当位置。也许有一些我应该处理的东西,例如,哦,我的 Z shell,您可能想调整您的提示,它的外观或其他什么。对。你会从那里得到它,但是很多事情他们就这样做了。因为,好吧,我们只会做一个点,因为它被隐藏了。人们不会看到这一点。直接把它放在那里。所以我恳求收听的各位把它放在。
把东西放在正确的地方或更好的地方。好吧,我对此有罪,但我并没有真正考虑 Windows。我只是考虑在类似 Linux 的环境中,主目录通常是正确的位置。好吧,也许吧。我的意思是,让我看看我这里有什么。我不这么认为,但让我做一个 A。好的。
我在哪里做我的隐藏文件?你知道吗?我会这样做的。等等。我会这样做的。例如……好吧,我可能在那里也做错了。所以,你可能是对的。好吧,也许吧。但是,例如,Studio 3T,这是一个 MongoDB GUI 管理工具。它在这里保存所有设置。这是我应该处理的东西吗?我应该看到这个吗?可能不是。它就像一个 .3T 文件夹,里面有我的漫游历史记录和垃圾。每当我使用 Android SDK 做某事时,我都有 .Android。我有……
我的意思是,我可以看到我有一个 .aws。也许里面有一些东西,对吧?但我有一个 .mapplotlib。真的,这里有一个 .mapplotlib。
为什么?它为什么在这里?我不知道。有一个 pip audit cache。字面意思是,它被称为缓存。我应该看到缓存吗?不,缓存不是用于读取的。它应该在,所有这些平台上都有一个字面上的缓存文件夹,它就在那里。也许在 Linux 上,它实际上就是这样,但是好吧,很好。但在其他平台上,它不应该这样,对吧?无论如何,也许我对此有点唠叨,但你应该下载
做这些正确的事情。我甚至没有考虑 Windows,尽管 Windows 确实有一组不同的位置,对吧?所以这个东西很棒,我推荐了 Apters,但是如果你向上看一点,它说:“注意,这个项目已被正式弃用。”- 哦,不。- 不,我们非常接近。
所以它说你可能想查看 PlatformDirrs,这是我的推荐。因此,转向 PlatformDirrs,这是在 toxdev 下,T-O-X dev。那里很酷的团队。它是一个小型 Python 模块,用于确定合适的特定于平台的目录,就像我刚才说的那样。但是,它在某些方面更好。
所以它有,我不知道你之前是否注意到,但在应用程序上可能有三个或四个目录。这个有文档、下载、图片、视频、音乐、桌面、运行时等等等等。根据您所在的平台,您可能需要转到许多不同的位置。对。它有。
更好的类型。它已被重写为使用路径,即来自 path lib 的路径对象等等。它针对其支持的所有不同平台进行了 CI 测试。所以非常酷的是,它不仅继续存在,而且实际上变得更好。
是的,talks development 组将保持其更新。所以,很酷。是的,完全正确。它不需要随着时间的推移而获得太多支持,对吧?这些东西不是超级动态的,但我确实非常感谢他们对其进行了现代化改造。我认为其中一些更改基本上是 apptors 与 Python 不同步,而不是与平台不同步,对吧?它就像,好吧,它没有类型。所以现在我们有了,你知道,就是这样一堆东西。
所以我非常高兴看到它并推荐 platform DERS。我已经在一些项目中成功地使用了它。我想使用这个和一些很酷的缓存东西。它使我的应用程序变得更好。你猜怎么着?我的波浪线/中不再有另一个点迈克尔的应用程序缓存。
轮到你了。我必须在我的某些应用程序上执行此操作。值得考虑。我很高兴你提到了它。好吧,我想实际想向 Bob Belderbos 表示感谢,因为……
他发布了,我认为他在多个平台上发布了,但我是在 LinkedIn 上看到的。它说,我喜欢 make 文件。它们节省了我的时间,并帮助我的团队以更统一的方式工作。我很想这么说。我也喜欢 make 文件,或者实际上我不喜欢它们。我只是习惯了它们。所以我将 make 文件添加到有意义的东西中。但是很长时间以来,我的项目中的其他人都不熟悉 make 文件。所以我不能。那不会是我。我会说,make 文件是什么?我们为什么有这个?
我们在 Python 中做什么?所以在一些 Python 项目中,我使用 talks,因为您可以使用 talks 做一些类似的事情,但它会创建虚拟环境,这很烦人。现在使用 UV 更好,因为它速度很快。但是,仍然有一个新的参与者,或者至少对我来说是新的,Bob 引入了它,它被称为 Poe the Poet。
我有点犹豫,因为我认为它可能与 poetry 项目过于紧密相关。但即使是这样,你也不必与它一起使用。我当然没有用它。但无论如何,我喜欢它的原因是,例如,我把它留在 Bob 的帖子中,因为它很棒。在您的 pyproject.toml 中,您可以在其中定义文本框。
任务。这很棒,因为我不必在我的项目中添加额外的内容和额外的文件。将其放在那里是有意义的。所以他有一个例子,例如,所以测试操作可以定义为 PyTest 或其他什么或 Cove。你可以有一个,有 PyTest 使用 Cove 与 Cove 一起运行。
使用代码覆盖率。嗯,linter 是粗糙的,这很有趣。很多人仍然这样做,但我记得粗糙比我记得 Lent 好得多,嗯,但是你知道,那只是我。嗯,但是无论如何,一些很酷的,嗯,
类型。哦,他为 T Y 做了 tie 检查。什么?哇。他领先一步。这超级新。嗯,与 UV 集成良好。我试过了。它非常漂亮。所以,呃,Poe,诗人文档,呃,说,呃,它是一个包含电池的任务运行器,可以与 poetry 一起很好地工作,嗯,或者与 UV 一起工作。我当然是用 UV 使用它的。呃,事情是有一些很酷的事情,如何定义这个。所以,在,在,
文档非常好。所以你可以,像 Bob 说的那样,你只需要添加一个名为 tool.po.tasks 的部分,然后定义一堆操作。有办法拥有,就像 make 文件或 talks 一样,实际上,我不知道你是否可以这样做。无论如何,你会有多个操作一个接一个地运行。序列非常酷。你还可以向事物添加帮助文本,这很好,
很好。但是把它放在里面,我只是喜欢它。它就在 pipe product at Tomo 中,并且可以与 UV 配合使用。嗯,喜欢它。所以,呃,肯定会在很多项目中切换它。还有一个例子,我不知道例子现在在哪里,但在入门指南中,嗯,或者可能是 Bob,无论如何,呃,将其添加到,呃,
将其添加到您的 PyProject.toml 中的开发依赖项中非常巧妙,因为现在如果您使用的是,希望您在 project.toml 中使用开发依赖项,以便新开发人员只需
安装他们只需要做的所有工具,所以非常酷,喜欢它,是的,非常酷,顺便说一句,你有没有注意到 Poe the Poet 的标志是埃德加·爱伦·坡,是的,他是诗人,很有趣,好的,接下来是一些数据科学,我链接到 New Stack 上的一篇文章,由
雅各布的,杰克,杰克逊。对不起。这就是 Pandas 3.0 将通过将 numpy 替换为 pie arrow 作为默认引擎来显著提高性能,从而实现更快地加载和读取列数据。
所以从 2.0 开始,我认为 Pandas 已经对 PyArrow 提供了可能的支持,PyArrow 更像是一种分析类型的后端,而 NumPy 更像是数据库式的,就像传统的行一样。就像它的内部结构中的条目一样,这使得
更容易提出诸如此数据方面平均值或最大值是多少的问题,对吧?对于这百万行来说,平均销售价格在列方向上要快得多,因为您只需按照数据的原样向下移动即可。它使行类型的操作变慢,但这不太常见。
对于数据科学来说,它还可以更快地读取和写入文件以及各种其他事情,所以我最近与 Reuven Lerner 在 Talk Python 上谈论了 pyar 革命,不久之前,那很有趣,基本上我们谈论了 pyar 的所有好处以及您可能考虑它的原因,但这里的消息是
这将成为 Pandas 3.0 中的默认值。什么时候发布?谁知道呢,对吧?Pandas 已经存在了很多很多年了,它已经是 2.0 版了。所以也许它还需要 15 年才能发布 3.0 版?我不知道。- 可能不会。- 版本是,我认为版本的认知正在发生变化。
超过,你知道我们谈论过零等等,但我认为版本现在开始变得更快了,对吧?Django 已经是 5.0 版了,之前是 4.0 版,它已经存在很长时间了,但它应该很快就会发布,所以我并不完全确定时间,我知道有些人比我更了解,但无论如何,也可能是那样,只是切换后端是一个足够大的变化,他们认为这是一个切换到一个的好理由
是的,这是一个非常好的观点。它说,随着时间的推移,Pyro 与 pandas 的集成越来越好,但将其用作后端仍然是实验性的,并且不建议在生产环境中使用,大概直到 3.0 版,它成为默认值,在这种情况下,它将成为推荐值,因为您必须绕过它才能知道更好,对吧?无论如何,这就是我的项目。查看 Pyro。查看我和 Reuven 关于它的谈话,看看 Pandas 的未来发展。酷。所有
好吧。我也想谈谈数据科学。所以,我要指出一个名为 Point Blank 的项目。它是一种使数据验证变得美丽而强大的方法。至少这是销售宣传或要点。无论如何,为什么我不做很多数据科学,但我真的认为这是一个很酷的想法。即使没有数据科学,任何类型的数据管道也一样
检查管道中的数据
在您的管道中,以及如何处理它。所以这是这个想法。所以它说它是一个强大而优雅的 Python 数据验证框架,它改变了您确保数据质量的方式。您可以使用可链接的 API 来根据全面的质量检查验证数据。它说通过令人惊叹的交互式报告进行可视化,我还没有查看报告。但无论如何,所以在顶部的示例中,
您有导入点空白,然后您有这些验证功能,您可以使用它们来使数据集无效。在这个例子中,它说,好的,在 D 列中,验证值大于 100。那里有超过 100 个值。然后实际上在 C 列中,验证值
或值小于或等于 5。然后有一些,某些列存在,确保日期和时间存在于这些列中。所以这个,你得到,你得到数据帧和/或数据集和数据帧,你必须能够确保它们具有正确的形状,数据在正确的位置。而且,这太棒了。如果它们没有怎么办?好吧,有一个带有某些验证的 REPL,获取表格报告。这对于调试和查看内容时非常有用。但是实时情况呢?你不会想那样做的。这是您可以实时使用的东西来检查所有这些,因为它有一些很酷的操作。所以这里有一些操作作为这个的一部分,您可以设置回调。它有一个回调。
一个内置的默认回调,用于在 Slack 上通知您。我不再使用 Slack 了,但是有一个名为 one 的函数。如果出现任何故障,您可以设置自己的通知函数,我喜欢这个想法,就像给我一个 API 来填充它,我可以根据需要填充它。我可以调用它 REST API。我会给自己发送电子邮件或其他什么。是的,随便什么。
我会连接它。所以这个想法就像,一直运行它。然后,如果您的数据链出现问题,请实时通知某人。
喜欢这个主意。你甚至可以记录它。那里有很多东西。看起来界面非常直观。他们有一个路线图,用于添加验证方法、高级日志记录功能和更多消息传递操作。所以这是一个很酷的项目。我喜欢它已经设置了行为准则和治理系统。所以这是一个很有前途的小项目。
这就是关于这个的全部内容。我真的。我非常喜欢这个主意。是的,我也喜欢。我不确定听到使用过它的人会很有趣,看看它是否真的可以实时使用?它是否会减慢速度太多?我想不会,因为您将在完成许多工作后在少数几个地方进行一些工作,在管道中的少数几个地方进行验证,以确保一切仍然正常。是的。
它肯定,你知道,数据科学很多时候感觉就像我要做一些工作来设置东西,然后我要对大量数据进行一些复杂的计算。是的。而不是一堆微小的函数调用。我认为这是一个函数,是我添加到 API 中的一点功能。说我希望这个 API 调用的时间少于 10 毫秒是完全合理的。没有人会说,我需要我的笔记本在不到 10 毫秒的时间内处理东西。就像,是的。
如果您添加一点开销,那可能没问题。这当然看起来对于单元测试也很有用,对吧?是的。是的。并且检查以确保——是的,就是这样,一旦你把所有东西放在一起,
我们是不是在某个地方丢失了什么?流程的某些部分正在填充空值或错误地处理无效数据并将垃圾放在那里或其他什么。嗯,嗯,在这些事情中丢失数据非常容易。这对于我们与我的第一个额外内容的联系如何?好的。如果您使用 polars 或其他什么,您可以说,我想进行一些计算。默认情况下,您得到的是一个新的数据帧,您得到的是
或您请求的列,例如新的计算机列。但也许您的意图是,我想向现有数据帧添加一列,而不是将数据帧转换为仅包含您请求的内容的新数据帧。因此,您不会执行操作,而是会说 .with_columns。
然后执行操作,它将保留原始数据帧,然后添加到它中,对吧?您可能会喜欢使用您的,这些列存在测试,然后您将能够说,哦,我们丢失了一些列。谁忘了 width_columns?你为什么知道要这样做,布莱恩?因为你参加了我们上周刚发布的 Polar's for Power Users 课程。哦,很好。之前,是的。所以这是,Spike,是的。
克里斯·特鲁多,这是一门非常棒的课程,Pollers for Power Users。将近三个小时,不到三个小时,您可以学习很多很酷的东西,如何使用 pollers,以及 pollers 在幕后使用 PyArrow 或 Arrow,因此您还可以获得一些很酷的经验。所以人们,请查看一下。它受到了好评,并且还在继续。好吧,这是我唯一拥有的额外内容。我有一个笑话,但在我们这样做之前有什么额外内容吗?哦,我本周有很多额外内容,所以……
让我们加载它们。所以我的重点是空白。我很感兴趣。所以我是,我是,我是你,我没有使用 rough。我经常使用 rough,但我并没有对其进行太多调整。我没有拉取,有很多新的规则,或者不是真正的新规则,但是您可以为 rough 打开很多规则来检查您的代码。而且,如果查看规则列表,有很多,有很多
您可以添加的规则。所以我对 Reddit 上的这个讨论很感兴趣,嘿,粗糙的用户,你们正在使用哪些规则,你们忽略了哪些规则?嗯,这个对我来说很有趣,它说,我每个项目都开始并选择全部并忽略无。嗯,这并不现实,因为其中一些规则相互冲突。嗯,我认为这可能是一个笑话,但我不知道。呃,
我喜欢,所以有一些认真的人说,嘿,这是我的集合。它有 PyFlakes 规则、PyCode 风格以及警告和错误。看起来像一个不错的集合。这只是看看其他人正在使用什么来检查一些东西的一种有趣的事情。这是另一个有不同方法的人。它不是选择使用哪些规则,而是选择全部但忽略某些规则
某些对他们来说没有意义的规则。是的,只是一个有趣的讨论。无论如何,我不确定我是否已经介绍过这个,但是截至 5 月 26 日,Python 3.14.0 beta 2 已经发布。因此,如果您正在测试新的 Python 版本,请务必关注新发布的 beta 版。
不错。是的,我不知道。我认为我们没有介绍过。好的。我想有点,哦,我还有几个主题。其中一个是,如果您碰巧,只是随机地想要切换 Mastodon 服务器,它不会并且不会丢失任何东西,例如丢失任何可能已经关注您的人。有一种方法可以做到这一点。我们将链接到一篇关于如何在 Feddy tips 上执行此操作的文章。它不是,
这不是一个微不足道的操作,所以我猜不要空腹做。看起来有很多步骤,但我很高兴有人指出了这一点。你为什么可能会这样做?好吧,最近 Fostadon 上发生了一些戏剧性的事情,而且我……
我不是这方面的专家,但我信任的人足够多,他们正在迁移到 FOSDON 之外,我正在研究它。我只是还没有这样做,因为,是的。是的。
无论如何。关于 Fostadon 的想法?我已经注意到我认为关注我的人。我在 Mastodon 上收到通知,说他们关注了我。我认为这就是为什么我认为他们正在移动帐户的原因。是的。我也收到了一些。我想,好吧,我也想关注他们。我已经关注他们了。所以如果你想,所以我猜这也是一项公共服务。即使您不考虑切换,如果您收到来自您认为的人的通知,我认为他们已经关注了我。是的。
这可能是因为周围的事情。我最后想谈谈的是,嗯,呃,
我认为我的 Python test.com,是这样的吗?是的,这是我的网站。我不知道我是否可以信任我之前使用的分析,因为我认为我受到了 AI 机器人和类似东西的严重打击。所以我更新了 robots.txt,但我也在检查一个新的分析包。我正在尝试 Fathom Analytics,我选择它们是因为它们不会,
收集任何人的数据。它只是一个哪些页面被点击了,哪些页面没有被点击,并且它们符合 GDPR 标准,所以
所以是的。无论如何,除了我正在尝试之外,我不会再做更多宣传了。是的,我们会看到的。是的。非常酷。就是这样。太棒了。太棒了。是的。我仍然喜欢 Umami analytics。同样,符合 GDPR 标准,甚至比符合 GDPR 标准更好,例如根本没有 cookie。怎么样?我们自己托管它。所以我们不必,我们不必告诉您我们如何与他人共享数据,但我们没有与他人共享数据,我认为这很棒。好的。
好的。毫不费力。它说毫不费力。我不确定它是否毫不费力。当迁移不起作用或其他什么时,我已经付出了努力,但你知道吗?没关系。它仍然很好。它比 Google Analytics 好。好吧。你准备好一些有趣的东西了吗?是的。我不确定我是否称之为有趣。我认为它在某种同情的方式上是有趣的。所以这个笑话是一个名为编程幽默的漫画,来自名为情感损害的编程这里。我认为这是,
布莱恩,你想成为那个吗?你想扮演这个角色吗?你想成为第一个方块的人吗?当然。嘿,有两个人看着一条狗。你的狗咬人吗?不,但它可以用其他方式伤害你。我不知道谁会这么说。我会做狗。狗说,你花了几个小时编码的功能不会被部署。管理层认为它没有必要。这个人开始哭泣。太糟糕了。
不,但它可以伤害你。你知道什么比这更粗糙吗?比这更粗糙,呃,软件发生在你身上?嗯,硬件人员,嗯,我记得这是几十年前的事了,但当时正在与一个团队合作,有人要退休了,他们在退休期间有点嘲笑他。但是,嗯,呃,他是一个 FPGA 开发人员,她是一个已知的 ASIC 开发人员,正在做,嗯,嗯,定制芯片。而且,
就像他参与过几十个项目,但只有大约5%的项目最终交付。大部分项目都在项目截止日期之前被取消了,这太糟糕了。
是的,硬件的交付周期肯定比软件长,对吧?从你开始工作到它发布的时间。是的,它是以年为单位,而不是周或月。是的,我肯定会考虑,我会看关于,你知道的,比如卡西尼探测器,它去了,那是土星吗?是的。
这些人会说,是的,我们25年前就开始做这个项目了,现在我完成了这个项目。继续下一个。就像你一生中只有两三个项目一样。太疯狂了。这些东西最好不要在返回大气层时烧毁。是的。好吧,愿那些谈论未发布功能的狗远离你们所有人。是的。再见。再见。