We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode #425 If You Were a Klingon Programmer

#425 If You Were a Klingon Programmer

2025/3/24
logo of podcast Python Bytes

Python Bytes

AI Deep Dive AI Chapters Transcript
People
B
Brian
Python 开发者和播客主持人,专注于测试和软件开发教育。
M
Michael
帮助医生和高收入专业人士管理财务的金融教育者和播客主持人。
Topics
Michael: 我认为很多人对`uv`存在误解,`uv`是一个很棒的工具,它可以替代`pip`/`pyenv`,并且比`python -m venv`更好用。它可以自动安装Python,无需预先安装,并且速度非常快。它可以将虚拟环境放在项目文件夹中,虽然这可能与某些公司政策冲突,但可以通过环境变量进行配置。许多人因为懒惰或对新工具的不信任而没有使用`uv`,但`uv`的优势在于它可以简化工作流程,提高效率。有些人尝试过类似的工具,但最终还是回到了`pip`和`pip-tools`,因为它们'好用'。`uv`有两种工作流程,一种类似于`poetry`或`hatch`,另一种更底层,类似于`pip`。`uv`允许在两种风格之间切换。有些人还在等待`dependabot`的支持,但实际上,如果使用`uv space pip compile`和`requirements.txt`文件,就可以获得`dependabot`的支持。 Brian: 我同意Michael的观点,`uv`是一个非常有用的工具。我个人也喜欢使用`uv`,因为它可以简化我的工作流程,提高我的效率。关于`uv`将虚拟环境放在项目文件夹中的问题,我理解这可能与某些公司政策冲突,但这可以通过环境变量进行配置。我也理解有些人因为懒惰或对新工具的不信任而没有使用`uv`,但这并不意味着`uv`不好用。`uv`的优势在于它可以简化工作流程,提高效率,并且它是一个开源项目,所以我们可以放心使用。

Deep Dive

Chapters
This chapter explores the reasons why Python developers might not be using UV, a tool that simplifies Python environment management. The discussion includes various responses from a Twitter thread, highlighting misconceptions and workflow preferences.
  • UV simplifies Python environment management, addressing issues like Python installation and virtual environment location.
  • Many developers express concerns about trust, workflow disruption, and the learning curve associated with adopting new tools.
  • UV offers flexibility in managing dependencies, allowing users to choose between project-level and low-level pip-style workflows.

Shownotes Transcript

您好,欢迎收听 Python Bytes,我们将直接为您带来 Python 新闻和头条新闻。这是第 425 集,录制于 2025 年 3 月 24 日。我是 Brian Ockin。我是 Michael Kennedy。我们很高兴地宣布,本集由 Posit Connect 赞助播出。稍后收听节目中的相关内容。您也可以与我们联系。如果您访问我们的节目笔记并访问所有链接,您会发现我们最近主要活跃在 Blue Sky 和 Mastodon 上。

如果您想感谢您的收听,或者想观看我们的直播。

您可以访问 pythonbytes.fm/live 观看,通常是周一上午 10 点,但本周是春假,所以我们提前一点进行。最后,如果您想将我们讨论的所有链接以及额外信息直接发送到您的收件箱,请访问 pythonbytes.fm 并注册新闻通讯。我们不会向您发送垃圾邮件,我们只会发送新闻通讯。

Michael,你今天有什么要和我们分享的吗?我想从一个 Twitter 线程开始。这个线程非常有趣。Flask 的最初创建者 Armin Ronacher 提出了一个问题。它得到的关注比我想象的要多得多。我觉得它很简单,但我发现它很有趣。好的。问题是……

如果您使用 Python,但未使用 UV,为什么?您为什么还不使用它?我收到了大约 215 个回复,近 1000 个赞等等。所以我想指出一些,我不会通读所有 215 个顶级回复。我想指出一些我认为有趣的回复。

Brian,也请说说你的想法。例如,有人说,我不打算再添加属性了,因为有很多属性,这将花费很长时间。所以有人说,我知道它取代了 pip/pyenv,但我应该用它来代替内置的“python -m venv .venv”吗?是的。是的。是的,你应该这样做。是的。是的,你应该这样做。我之所以提出这个问题,我之所以把它作为一个主题,是因为有很多

我认为有很多误解,或者很多人都在想,什么是 UV?所以我想,我认为这些值得讨论。那么,使用 UV venv 而不是 Python venv 的好处是什么呢?如果你的电脑上没有安装 Python,Python venv 会报错,提示没有 Python,对吧?UV 会说,哦,我们为什么不帮你安装最新版本的 Python 呢?或者你可以指定 3.12 或 3.11 或任何你想要的版本,对吧?或者,

或者构建版本,对吧?3.13.1 而不是 3.13.2,等等,对吧?所以它让你不必担心是否安装了 Python。Brian,我买了两个新电脑,两个新电脑。我买了一台新笔记本电脑和一台新的 Mac mini,我还没有在上面安装 Python。事实上,我有点烦,

当我需要 brew install 安装 Python 时。我想,该死,你搞乱了我的流程,对吧?除了虚拟环境,我不想在这里安装任何 Python。我希望这些虚拟环境由 UV 管理。关键是,这只需要两秒钟。使用 PyENV,它会下载并在本地构建,如果你没有它,可能需要 10 分钟或更长时间。使用 UV,只需要两秒钟。

它非常棒。好吧,我最近遇到了构建问题,因为存在一些问题,尤其是在 Windows 上,如果你的依赖项以某种方式被搞乱了,它可能会导致你必须重新编译一些东西。是的。

或者尝试重新编译一些东西。然后你必须确保你的电脑上有正确的编译器库等等。这是一个烂摊子。——有人说:“但我需要安装 Python 才能编写 Python 程序。”我不知道,是的,但请参阅之前的评论。——我的意思是,它正在安装,使用 UV 安装。它不是像你通常认为的那样安装,但在后台,UV 将它放在你的电脑上。

这是一个有趣的问题。我想听听你对此的看法。我反对这一点仅仅是因为我的工作流程,而不是反对提出评论的人。

因为我不使用它,因为它将 VE 和 V 文件夹放在你的项目中。由于公司政策,我无法从那里运行可执行文件。有很多这样的用例。我不知道为什么 Astral 没有更紧急地解决这个问题。有人回应说,这听起来像是一个糟糕的公司政策。是的,它确实如此。你可以配置它来做其他事情。是的,完全正确。你可以设置一个环境变量,让它放在其他地方。现在……

让我永远无法采用 Conda 的原因之一是,如果你要为数据科学项目创建一个 Conda 环境,它会把它放在某个隐藏的文件夹中。是的。一个位于你的配置文件中的集中式隐藏文件夹,而不是你的项目中。所以我会去一个项目,我想,我……

几个月后,我想,我是否为这个项目创建了一个虚拟环境?也许吧,但你必须说 conda activate 并命名虚拟环境。我想,我叫它什么名字?你知道我的意思吗?他们就像,哦,这让我抓狂。而把它放在项目文件夹中,你可以查找。是的。那里有一个虚拟环境。我可以开始了。我之所以不喜欢它,原因也是如此。调用 mind.VNV。我只是把它放在没有点的地方,因为我可以在 Finder 或普通的 LS 或其他地方快速看到,嘿,看,它确实有一个虚拟环境。

好吧。我懒得从 pyenv 和 pip 切换。我的意思是……这似乎是你自己的问题。懒惰有很多种,比如,我不愿意走两英里去商店。还有一种是,我不愿意在我的命令中输入 uv space pip 而不是 pip。好吧,就像,我不愿意走两英里去商店。

我很懒。这就是我使用 UV 的原因,因为它加快了所有事情,我可以更快地完成我的工作。是的。Dask 和 Coiled 的 Matthew Rocklin 曾在一个 TalkBython 的评论中说过,

说过一个非常有趣的评论,基本上就像编程中的很多事情发生是因为我们利用了程序员天生懒惰的倾向。让我们把它设置好,这样他们就可以做这件事,这样他们就不用做那么多工作了。好吧,我现在加快速度了。信任问题。如果他们进行诱饵和转换怎么办,对吧?它是 VC 支持的。如果他们突然说,那里有两个评论。第一,它是开源的,我相信很多人已经分叉了它。第二,虽然仍然存在一些潜在的问题,但有人必须运行……

某些功能的 Python 独立构建,但就是这样。而且……

他们已经说过他们不会这样做,对吧?Charlie Marsh 说,我们的商业模式并不依赖于对 UV 收费。这是一种开放核心模型。好吧,但 Google 过去曾说过,不要作恶。所以,是的。是的,但 Brian,我完全理解你的意思。但是你有没有看过,当他们这么说的时候,他们的背后是不是交叉着手指?听着,我只是告诉你,你必须仔细检查这些事情。不,我只是开玩笑。我知道他们做了。实际上,是的,当 VC 参与进来……

当有很多钱的时候,一切都很好,但当事情变得紧张时,它就可能……好吧,我们也会切换到其他东西。如果 UV 变坏了,我们会很快切换到它。我们会切换。是的,我们会切换到 VU。我有一个理由,但当你用完好理由的时候。好吧。另一个,受虐狂。我还没有切换,因为我是受虐狂。

另一个。很多次我尝试过类似的工具,但总是回到 pip 和 pip tools,也就是 pip compile。这些,它们只是工作。我不想用什么很酷的东西。我知道,但在每个命令前添加单词 UV,例如 UV pip compile、UV pip install,这并不是一个很大的风险,可以回滚。是的,我们也尝试过其他的,它们并不那么有趣。完全正确。我本周尝试过,但期望的是 UV install requests 而不是 UV add,但是

我提到了这一点,切换回 pipenv。我认为这很有趣,因为 UV 有两种工作流程。一种是把它当作 poetry 或 hatch 来对待,让它管理你的项目。这就是 UV add 风格,对吧?它管理锁文件等等。他们期望的是 UV install requests。如果他们输入 UV pip install requests,他们就会继续使用常规工作流程。我认为值得强调的是,有两种不相关的工作流程

用于项目。一个是项目管理器 poetry hatch 风格。一个是更底层的 pip 风格。是的。是的。好的。但是 UV 就像,你可以在这两种风格之间切换,一切都能正常工作。而在另一种情况下,你必须接受它或不接受它。是的。

是的。要么全有要么全无。是的。另一个很快。我们部分使用它。当 Dependabot 支持可用时,我们将进行转换。请参阅之前的评论。如果你说 UV pip install 和 UV pip compile 并使用 UV 编译的 requirements.txt 文件,你就有 Dependabot 支持了。对我来说,Dependabot 支持是一个负面影响。我非常讨厌 Dependabot。我试图在我的某些项目中关闭它,但我无法关闭它。呃,

除非关闭 GitHub 的所有安全功能。所以我不得不设置邮件规则,说,删除 Dependabot 发送的任何包含“bump”字样的邮件。因为我会在周一醒来,可能会有 25 到 30 条来自 Dependabot 的单独消息,说,嘿,猜猜怎么了?你有一个更新。你有一个更新。哦。

我想,哦,Dependabot,请停止这样做。如果他们只是说,你的项目有 17 个更新。好吧,这会有所帮助。17 次你的项目有更新是没有帮助的。也就是说,如果你使用 uv space pip compile 和 require 不是 TXT,你就有 Dependabot 支持了。

好吧。最后的想法,我将用 Jared Sheel 的这句话来结束。在这个问题的回复中看到了很多斯德哥尔摩综合症。好的。有趣。很多人都在某种程度上,你知道,他们被那些效果不好的东西束缚住了,或者他们被那些东西束缚住了,好吧,这就是我们做事的方式。我知道这很糟糕。它并不更好,但这就是我们做事的方式。我的意思是。是的。是的。

是的,我想说的一件事是,如果你全局安装 UV,你会得到很多好处。你使用 curl install 或其他什么东西,对吧?这是,也使用,让你为你安装 Python。使用所有其他 Python 依赖项,你可以使用你自己的自定义,比如你自己的内部 PyPI。

对于那一部分,curl install 和安装二进制文件,Python 二进制文件,我不知道你是否可以这样做。所以我认为这仍然可能是一个不错的理由,因为你在公司使用防火墙。

而那一部分工作不正常,但是你仍然可以使用 pip install uv,我已经做过时间测试,即使你使用 pip install 它,使用 uv 仍然更快,所以你只是没有得到所有的好处,是的,绝对很棒,无论如何,你已经有一个项目了,你不能从头开始,你必须有 python,你必须有一个 vnv,然后你才能继续,是的,无论如何,我们

这很好,因为大多数情况下你就是这样生活的。你不会不断地创建项目。我喜欢我们的听众。Henry Schreiner。嘿,Henry。只是喊出来。Dependabot 上周刚刚添加了对 UV Lock 的支持。怎么样?你知道那个 Twitter 线程有多过时吗?上周。上周。好吧,而且很多有知识的人可能没有回复,因为它在 X 上。是的。

是的,那是真的。好吧,我的意思是,对于它是什么,它有令人惊讶的互动量,呃,令人惊讶的互动量。好的。轮到你了。好的。呃,让我们稍微谈谈 UV。

我们还没有这样做。所以我想谈谈 Tim Hopper 的这个很酷的项目。我喜欢 Tim。有点想念他。他是我过去经常在会议上遇到的家伙之一,最近没有参加会议。所以,你好,Tim。无论如何,他发布了 Python 开发者工具手册。它是一个正在进行中的项目,但他已经工作了一段时间了。

是的,Tim Hopper,很棒的家伙。无论如何,Python 开发者工具手册,它介绍了很多,基本上是做事情的新模型。有,我不知道,我想他确实对很多事情都发表了评论。UV、Poetry、Flit、Subtools、Hatch,

但我立刻注意到,他正在做教程、操作方法和解释,以及一种很酷的方式来设置一些文档。但是,比如说,发布你的第一个 Python 包或创建你的第一个 Python 项目。他没有做很多历史介绍,而是直接给你正确的答案。它是 UVinit。而且……

我的意思是,实际上很多其他的 init,比如初始化项目,我以前都不喜欢,甚至像 flit init。我不喜欢,但 UV init 非常好。他们做得很好。无论如何,所以使用,然后添加依赖项。我喜欢这个,比如,让我们跳过所有,好吧,你可以用九种不同的方法来做。只告诉我一种方法。或者至少是一种方法,它是有主见的,但这是一个好的主见。是的,

发布你的第一个包,谈论如何设置它。无论如何,很酷的资源。我希望看到它得到很大的发展。所以无论如何。

我喜欢它。它鼓励人们进行测试。它鼓励人们在去其他地方之前先使用 TestPipe.ai。但是,要小心,因为有很多项目不使用 TestPipe.ai,他们会不时清理它。所以,即使一个包在 TestPipe.ai 上可用,它也可能在大型 Pipe.ai 上不可用。是的,是的。所以你就像,哦,它上传了,这意味着没有名称冲突。不,不,不。

是的。搜索 PyPI。是的。但我想提到的另一件事是,让我们看看,在顶部,它说,这不是一本关于 Python 编程的书。相反,这本书的目标是帮助你理解用于使 Python 开发更容易和更高效的工具生态系统。所以它会不断发展。我已经评论了一些测试内容,他说他还会添加一些关于测试的内容。

他说手册是根据 Daya Taxis 框架构建的,好吧,对此一无所知。教程、操作方法、解释和参考。所以我不会链接到它,但他的项目中有一个关于它的链接。我必须阅读更多关于这个的信息。这很有趣。我从未听说过这个。我也没有听说过,但它看起来确实很有趣。无论如何,以及一些关于设置 Daya 的很棒的信息。

设置 rough 来检查你的代码等等。我一直对 UV venv 和 UV pip 等等感到兴奋,以至于我有点忘记了我一直在使用 UV rough 或一直在使用 rough。它被捆绑在那里。所以我很想知道,当我们谈论的时候,让我们稍微过渡到 rough 一下,我最近听你做的那次采访。你在谈论,我认为你最近采访了 Charlie。

而且,我,我喜欢 rough 的详细程度,但是,

但这是我认为我……rough 可以放在 PyProject TOML 中,现在也有 Rough TOML 了。而且我喜欢……我认为我可能会过渡到使用 Rough TOML 或尝试一下,因为我最终会对规则进行相当多的调整。我并没有真正调整项目。我只是在调整 lint 规则。所以……

你使用的是,你使用 rough 吗?你把你的规则放在哪里?我喜欢 rough,我完全支持 rough.toml。是的。它绝对需要超过一页小号字体才能显示在我的屏幕上。我不希望,你知道,你可以合理地拥有一个比 rough toml 更小的 pipe project at toml。所以,你知道,我不希望把它们放在一起。是的。我喜欢他的,那个,Charlie 关于规则的评论,

即使他自己也没有全部打开,那也很傻。所以我尝试了。我尝试打开所有规则,有些规则不一致。有两三个规则与其他规则冲突。所以你必须决定,你知道,如果你打开所有规则,实际上存在内置冲突,因为一些规则会冲突,但它会给你非常详细的信息,关于如何,无论如何,如何修复它。但是,

是的,使用 Rough TOML 而不是 pyproject.toml 的另一个好处是,如果你使用 Docker 或基本上任何持续集成风格的东西,它会查看,好吧,如果任何源文件发生更改,我需要重新构建或重新部署,重新启动你的 Web 应用程序、API 或其他任何东西,你可以更改你的 Rough TOML,如果你使用 Docker ignore 排除了它,例如,然后你重新构建它。它会说,是的,没有更改。对吧?

除非这些更改导致,比如真正的代码更改。所以我知道这不是什么大问题,但这就像在分离这些东西的专栏中加了一分。是的,所以如果你只使用少量规则,它可能在你的 pyproject.toml 中很好,但如果你正在尝试打开越来越多的规则,那么……

我确实认为,默认情况下,并非所有规则都打开,这既令人惊讶又很酷。因为过去很多 lint 工具都默认打开所有规则,你尝试使用该工具,它就会像爆炸一样出现错误。但是 rough 不会。它有一些好的标准规则,然后你必须打开它们。所以无论如何。是的。

我在工具书中看到的另一部分内容是,它使用 UV add 添加的。我使用 UV tool install rough 将 rough 安装到我的系统中,因为它是全局的,然后为每个项目使用 rough toml 来配置它。这样,你就不必更新你的项目或确保记住安装它。它就像一个全局可用的工具。是的。是的。我应该这样做。我不知道为什么我不这样做。好吧,

无论如何。好吧,我们应该谈谈今天帮助我们的 Posit 的优秀员工吗?当然。好的。让我们开始吧。本集 Python Bytes 由 Posit 的员工赞助播出。Posit 指的是……

最近对 Python 社区进行了巨额投资。最初以 RStudio 而闻名,他们一直在为 Python 团队构建一套工具和服务。今天,我想关注托管基于 Python 的数据科学工作负载。这包括仪表板、报告、图表、交互式 Web 应用程序,一直到自定义 Flask 和 Django 应用程序。

他们的服务是 PositConnect。PositConnect 使数据科学家能够轻松共享使用 Python 代码构建的工作。如果您有 Streamlit 应用程序、仪表板、Plotly 交互式图表、快速 API 服务,甚至 Quarto 报告,只需将 PositConnect

它需要的代码来维护资产,Kinect 会自动完成其余工作。Kinect 将管理您的 API 并提供您的交互式应用程序。如果需要,可以定期更新您的端口和仪表板。没错。不再需要向利益相关者解释为什么仪表板或图表在上周停止更新。您可以专注于您的数据科学并利用您的技能,而 Kinect 让您看起来很好,让您的代码在私下运行。

使用 Connect,您可以在 Connect 服务器上获得一个私有 URL,确保您的资产持续可供您的股东使用。您还可以控制哪些用户可以访问该资产。让 PositConnect 处理共享您的工作所涉及的交付和 DevOps。

您专注于您最擅长的事情。因此,如果您在数据科学团队工作,您应该为您的团队和组织检查 PositConnect。今天访问 pythonbytes.fm/connect 并获得……

三个月的免费试用,看看它是否适合您。网址是 pythonbytes.fm/connect。该链接位于您的播客播放器节目说明中。感谢 Posit 支持 Python Bytes。当然。谢谢,Posit。这有点像数据科学主题,对吧,Brian?让我们谈谈 Adam Chains 的一些内容。我知道我们谈到了 ROUGH。

但是 black 呢?所以 black 仍然是一个超级重要、超级有影响力的事情。我想象一下,如果没有 black,也许 rough 就不会存在。所以我想提出,我想指出一个名为 Blackened Docs 的工具。

所以,如果您有文档,并且在该文档中,您可能有某些代码块,一些 Python 代码块,并且您想格式化它们,我不知道您的 Markdown 编辑器如何格式化代码,但我告诉您,我喜欢我的 Markdown 编辑器,它是 TypeHorror。当我输入 tick、tick、tick、Python 类型等等时,它没有根据 rough 风格重新格式化的功能,对吧?但是这个工具可以。所以你可以……

你可以对各种不同的东西运行它。所以它说文档,但是如果你看它,它会做的是,它适用于重新构建的文本或 Markdown 文件。好的。例如,呃,

我正在编写来自 TalkPython 的《Python in production》一书,它有大约 250 页的 Markdown。里面有很多 tick、tick、tick Python 之类的东西。哦,是的。我可以对它运行这个工具。它不必是文档。任何包含 Python 代码的重新构建文本或 Markdown,你知道,完整的代码块部分。你可以用它来处理。哦,酷。这很酷。对吧?是的。是的。

你还可以安装一个 pre-commit hook。它带有一个。然后,当任何人提交时,它会自动格式化它。我认为,它也处理文档字符串吗?让我们看看。我相信,是的,你可以在 Python 文件上运行它。

来重新格式化文档字符串。是的。所以文档字符串和基本上 Markdown 和重新构建文本。这太棒了,对吧?是的。所以就是这样。你甚至可以使用一些注释来关闭它,比如,不,请不要在这里这样做,等等。所以要明确一点,我的意思是,这可能是显而易见的,但它是在你的 Markdown 文件中将代码块格式化为 black 风格。Markdown 没有 black 风格。是的,完全正确。好的。好的。

虽然这也是一个有趣的想法。我实际上不介意一个,类似于 Markdown 的 black,因为它让我很抓狂。我使用井号和井号、井号来进行标题,但是 Markdown 允许使用下划线,比如,那个,下面的虚线。而且,我讨厌它。它让我抓狂。这就像有人从结构化文本中把它粘贴到这里一样。所以让我们更容易转换我们的结构化文本。不,不,请不要这样做。好的。

我们在这里是因为我们不喜欢结构化文本。你不明白发生了什么吗?好吧,无论如何,谢谢 Adam 提供这个。这是一个很酷的项目。是的。我将继续使用一些数据科学主题。

所以我想谈谈将笔记本重新设计为可重用的 Python 程序。你听说过这个 Merimo 吗?Merimo,是的。我刚刚在 TalkPython 上采访了 Merimo 的创始人。好的。是的。它还没有发布,但它已经录制完毕,可以在 YouTube 上观看。好的。

这有点意思。我想,好吧,其他人正在重新设计笔记本或其他什么东西。但这很酷。那么我们在这里看的是什么?我们在这里看的是,我将跳到一些代码示例。

笔记本不再需要像 JSON 格式的笔记本一样了。它可以像 Python 一样,或者至少在 Merrimo 环境中是这样。我不太确定。你可能比我更了解。你可以直接将这些打开到笔记本中,还是必须做一些特殊的事情才能打开它们?所以这是一个不同的……

它与 Jupiter space lab 或 Jupiter space notebook 不同的运行时环境。它是一个不同的运行时。好的。但是它们,它们非常相似。好的。明白了。但我真的很喜欢这一点。它不仅仅是 Python 代码。它还有额外的东西。看起来他们还添加了一些装饰器,让他们的环境理解它是什么。比如有 app.cell 和,和,

和 app.zel 和 app.function。而且,呃,

暂停,可能还有其他内容,但其中一些好处令人难以置信。因此,一些好处是您可以更容易地使用 Git 进行版本控制。好吧,您也可以使用 JSON 来做到这一点,但是差异通常没有多大意义。通常差异到处都是。您可以使用 pytest 进行测试,而这个测试非常好。这就是问题所在,因为过去存在这个问题,

测试有点问题,或者至少在我尝试很久以前就是这样。也许他们已经通过其他方式解决了这个问题。但是,即使使用 doctest 和其中的一些其他内容,嵌入 SQL 和 Markdown,就像您可以使用 Python 通常执行的所有操作一样,您现在仍然可以使用这些。这真的很酷。我想检查一下并尝试一下。这可供所有人运行,对吧?

是的,它可供人们运行。您可以下载它,在本地运行它。他们还有一些云选项,这真的很棒。有一些非常好的托管方式。您只需说将其作为服务运行即可。这里相当有趣的一件事,让我占用一下舞台,就是这一切都在……

在您的浏览器客户端中运行,这与 Jupyter 的主要区别之一在于它由 WebAssembly 和 PyScript 提供支持。

氧化物。不,应该是 PyScript,抱歉。例如,我调用的这个,我会把它放在节目说明中,是 F1 车手职业生涯浏览器。看看这个看起来多漂亮,布莱恩。就相对而言,例如,将其与 Jupyter 进行比较。我认为它有一个非常漂亮风格。你知道,你可以查看,好吧,这是旧的。我必须在这里为汉密尔顿添加法拉利。我们有梅赛德斯和迈凯轮。

但它由例如 DuckDB WebAssembly 和 F1 数据提供支持。是的,它有一些小的浏览器之类的东西。感觉非常精致。它还具有类似于 Jupyter Notebook 的协作编辑功能。不,更像是 Google Docs。

所以你可以一起使用它们。这有很多很酷的东西。好的。但是这个,好的。它仍然很酷。我,但我误解了。我以为这可能只是一种运行 Jupyter Notebook 的新方法,但是。是的。但是有很多新功能,我的意思是,是的。是的。是的。

好吧,我想我缺少或不理解的是,这与 Jupyter Notebook 之间有什么关系?您可以使用 Jupyter 环境中的任何其他部分吗?我相信是这样。好的。我现在试图回忆一下两者之间有多少集成,但是,是的,我认为是这样。好的,酷。我会进一步调查。无论如何,我仍然对此感到非常兴奋。看起来很不错。我必须玩一会儿。是的。是的。

是的,绝对的。而且它真正试图解决的另一件事是他们试图解决……

哦,你知道吗?我说它有 Google Docs 集成。不完全是。但他们试图解决的是将笔记本与 Git 集成的真正挑战。例如,对于笔记本电脑,它们实际上是 JSON 文件,然后它们有输入块和输出块。因此,如果您运行了一些代码并且它依赖于任何可能发生变化的内容,您将获得巨大的。您不会得到一个很好的合并,而是会得到两个巨型嵌入式 Blob 的冲突等等。是的。是的。

这真正解决的关于笔记本的另一件事是笔记本允许您以任何顺序运行它们,这有点疯狂,对吧?例如,我可以运行单元格 1、单元格 2、单元格 3、单元格 4,更改单元格 2,再次运行单元格 4 以查看输出。但是,更改可能会使单元格 2 或单元格 3 不同,你知道,你可以跳过,你会在旁边有小数字,表示运行的顺序,例如 1、7、8,

8、19、14 等等,你知道,你会想,哦,这个,所以这是反应式的,因为你创建的每个变量都像被包装了一样。它并非技术上包装在反应式行为中,它们在每次运行任何内容时都会解析 Dom,并在单元格之间创建关系。例如,单元格 10 使用单元格 1 和单元格 3 中的内容。嗯,

因此,如果您运行单元格 3,它就知道单元格 10 已过期或可能会为您重新运行它。因此,即使根据顺序,它也会跟踪关系,这样您就不会最终得到陈旧的数据,然后运行另一个提取该陈旧数据的单元格等等。因此,它也试图真正解决这个问题。这很酷。是的。这是我第一次开始使用笔记本电脑时让我感到困惑的事情之一。是的。

是的,有点奇怪。例如,为什么允许它只运行这部分?从探索的角度来看,这是有意义的。例如,这些都很昂贵,现在我只想在这里和那里提出问题。但从可重复性和调试的角度来看,这是不好的。是的,是的。无论如何,一些有趣的新东西可以玩。确实,是的,这很酷。是的。

这些是我们的项目。你还有什么额外的东西吗?我有一些额外的东西。让我们快速看看几个。PyCon 台湾,PyCon 台湾 2025 正在征集提案。它将在秋季举行。因此,您直到 4 月 5 日都有时间,世界各地都可以。因此,如果您想前往台湾并在此处展示内容,他们有很多英文提案。

主题和演讲等等,他们正在寻找更多。所以请查看一下。另外,关于 Hacker News 的后续内容。还记得吗,布莱恩,我正在阅读 Hacker News 的内容,说谁在找工作,谁在招聘。好吧,Shinjitsu 给我们发了一条消息,说,我相信其他 Hacker News 阅读者已经告诉过你了。不,他们没有。所以谢谢你,Shinjitsu。但如果你没有,你完全弄错了。

例如,哦,对不起。它说,询问 Hacker News 谁在招聘是一个每月发布的帖子,要求雇主发布他们正在发布的职位,而不是人们询问。

哪个?谁想被雇用是一个每月主题,其中有正在寻找工作的人关于他们自己的信息。所以我们是不是弄反了?实际上是坏消息?是的,我认为这就是它的意思。让我看看。是的,我认为我说谁想被雇用是由雇主提出的,谁在招聘是由正在寻找工作的人提出的。但这听起来像是相反的。所以这会让它不那么乐观。所以对此表示歉意,各位,如果这有点倒退。哦,好的。看,勘误。

勘误,是的,我们必须有一个勘误,你呢,我有一些事情,首先,PyCon US 宣布,如果符合某些条件,国际与会者可以获得退款政策,实际上,我只是,我只是作为美国人感到尴尬,我们必须做这样的事情,但是,

许多社区成员前往美国进行国际旅行变得更加复杂。PyCon US 欢迎所有社区成员来到匹兹堡。但如果由于某些原因您无法前来,请阅读帖子以了解详情。但我认为,这是一个非常公平的退款政策细节。无论如何,是的。

如果您由于某种原因无法前来,请查看此信息,也许您可以获得退款。我一直在思考这个问题。有很多不好的事情。

我对此不高兴,布莱恩。我不高兴我们的国家以这种方式对待人们。如果你抓住某人试图偷偷越过边境,这是一回事,我的意思是,这是一个关于你想要多么宽松或积极地执行这项政策的政治辩论。但是当人们,尤其是来自友好盟国的,只是试图过来,却被关进监狱,因为他们没有合适的签证或其他什么东西,那就是……

那是糟糕的事情。这很尴尬。好吧,你永远不会认为这是美国对待人们的方式。我知道他们对移民有点强硬,但是,你知道,澳大利亚也是。加拿大也是。我在加拿大边境被拘留了很长时间,最后才被允许进入加拿大。而且,好吧,这很麻烦。但这又是另一层面的粗鲁和……

是的。我很高兴看到 PyCon 这样做。我向全世界道歉。我保证,布莱恩和我并不支持这项政策。退款。我们支持退款政策。是的。不是退款政策的原因。是的。对。好的。哦,在一个稍微积极一点的方面,嗯,嗯,我终于完成了,嗯,

重组完整的 PyTest 课程系列。最初是,所以这是在 pythontest.com 上。最初是,我将我写的 PyTest 书重制成课程,并且

这是一门课程,但实际上这本书分为三个部分,旨在在您的开发过程中不同的时间阅读。当您第一次开始使用 PyTest 时,然后当您尝试将其应用于项目时,然后当您非常擅长并且真的想脱颖而出并变得非常擅长时,还有一个部分。并且

我把它放在一门课程中,我认为它并没有完全符合人们使用和学习 PyTest 的方式,所以现在它被拆分了,所以您仍然可以获得完整的包,它包含这三个部分,但是学习 PyTest 基础知识现在是一门单独的课程了,您可以单独购买它,然后您可以获取第二部分,

然后是第三部分,但第二部分是与项目一起工作,第三部分是助推火箭,例如构建插件,这可能是您想要获取的原因,以及高级参数化技术,但是即使您没有购买其他部分,我也喜欢现在将它们分开,因为如果有人说我真的很想构建我自己的插件,您可以只查看这门课程,而不是学习所有三门课程,所以

这就是我的大新闻。我做的另一个重组的原因是现在大多数章节都是每个章节一个视频。第二章和第三章有点长,所以我把它们分开了,每个大约 20 分钟。但我现在真正喜欢的是,在每个视频中,您可以弹出并更改速度。所以你可以观看整个……我通常是一个 1.25 或 1.5 倍速的人。

嗯,这让我很困扰,因为你必须每三分钟重置一次设置,就像对于三到五分钟的视频一样。现在,现在你只需要为 20 分钟的视频设置一次即可。无论如何,对我来说效果更好。希望对其他人也有效。所以这就是我的,我的,这就是我的额外内容。是的。太棒了。祝贺你已经完成了所有这些工作。太好了。

是的。那么,讲个笑话吧?我们大胆地前进,没有人去过。是的。那么,上周的笑话是关于,嗯,是星际迷航克林贡主题。嗯,我们有谁?嗯,我们有来自 Mastodon 的 Holgi 说,你,再次,你可能已经知道了,但是,嗯,嗯,有一件事叫做,嗯,

克林贡程序员。所以这是在 Cornell.edu 上。如果您是克林贡程序员,可能会听到的 12 件最重要的事情。我有点喜欢这个。所以我们可能应该放大一点。好的。我们不会阅读所有 12 个,但第 12 个实际上非常好。规范是针对一周的,对于胆小的人来说。你想读这些吗?

让我们看看。这台机器是上帝的作品。我需要一个双奔腾处理器。如果我要与这段代码作战的话。是的。第四个,真正的克林贡战士不会注释他的代码。调试。克林贡人不会调试。我们的软件不会娇惯弱者。我认为完美的。哦,不,我们可以。克林贡函数没有参数。它们有参数,而且总是能赢得它们。

我喜欢它。好吧,让我们总结一下与上周的联系,那就是我们将进行生产测试。好的,是的。所以这是第几?第一名?第一名,去做吧。我们的用户会害怕并畏惧我们的软件。发布它,发布它,让他们像狗一样逃跑。确切地。

确切地。这也很不错。这也提醒大家,如果你认为我们可能已经听过了,很有可能我们没有。所以无论如何都发给我们。我们不介意重复。所以如果你发现了一些有趣的东西。给我们很多赞扬,布莱恩,也许比我们应得的还要多。有时。是的。

无论如何,再次感谢您加入我们的通话,并享受另一集。感谢所有收听和与他人分享此内容的人。我们希望壮大我们的社区。是的,非常感谢大家。回头见。再见,布莱恩。再见。