写点什么

PyScript:让 Python 脚本在 Web 中跑起来

  • 2022-05-20
  • 本文字数:2422 字

    阅读完需:约 8 分钟

这是下一个大事件吗?如果继续发展下去,有可能。

 

在 2022 年 PyCon 美国大会期间,作为主题演讲嘉宾之一的 Peter Wang 公布了 PyScript,一种在 HTML 中直接编写 Python 脚本的方法。或许你不知道 Peter,但你可能听说过 Anaconda,这是一种流行的开源的 Python 和 R 语言的发行版本,特别关注数据科学。Peter 正是 Anaconda 的 CEO 和联合创始人。

 

换言之,PyScript 是由一家著名的科技公司开发的,这可能会保证它在不久的将来成为可行的方案。它在 Python 和 Web 开发者中受到了极大的关注,GitHub 上已有超过 10k 颗 Stars。然而,它是否能成为一个成功的、有竞争力的产品,取决于长期的时间和开发投入。目前,它还有一些已知的缺陷(将在最后讨论)。

 

闲话少说,让我们快速了解一下这个令人振奋的产品吧!

py-script 标签

我们知道,HTML 文件是大多数网站最常见的元素。在创建网站时,我们的工作就是直接或间接地通过一些框架来编制 HTML 文件。在典型的 HTML 文件中,你会看到各种类型的标签。例如,定义了 HTML 页面的元数据和关键信息,</code><span style="color: #494949">是整个文档的标题,而</span><code data-type="codeinline"><h1></code><span style="color: #494949">、</span><code data-type="codeinline"><h2></code><span style="color: #494949">等定义了不同级别的内容标题。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">如前所述,PyScript 允许你在 HTML 中编写 Python 脚本,它使用一个特殊的标签</span><code data-type="codeinline">py-script</code><span style="color: #494949">。在这个标签中,你可以嵌入 Python 脚本。要了解它是如何工作的,可以创建一个 HTML 文件,其中包含以下代码,并使用 Chrome 浏览器打开该文件。在 Chrome 浏览器中,你应该能够看到类似下面这样的内容:</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/b7/b7cf3649eb920dfd76b246074c54a8f0.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/d1/d1c8a6e49c89d1695ab45b26f726d77e.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="font-size: 9px">作者截图</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">在上面的代码片段中,你可能已经注意到以下三个关键点:</span></p><ul data-type="bulletedlist"><li data-type="listitem"><p data-type="paragraph"><code data-type="codeinline">link</code>标签定义了一个外部样式表。在这个例子中,我们使用了 PyScript 提供的<code data-type="codeinline">css</code>文件。</p></li><li data-type="listitem"><p data-type="paragraph"><span style="color: #494949">我们使用</span><code data-type="codeinline">script</code>标签来嵌入一个由<code data-type="codeinline">src</code>定义、由 PyScript 托管的外部脚本。我们使用了<code data-type="codeinline">defer</code>,这样脚本会在下载和页面解析完成后执行——本质上是一种延迟执行,而不是实时执行。</p></li><li data-type="listitem"><p data-type="paragraph"><span style="color: #494949">最有趣的部分是</span><code data-type="codeinline">py-script</code>标签。如你所见,<code data-type="codeinline">print("Hello, World!")</code>是 Python 代码。当执行 HTML 文件时,就可以看到代码求值结果。</p></li></ul><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">这很酷,不是吗?如果你不熟悉 Web 开发,但了解 Python,就可以使用 PyScript 嵌入任何有效的 Python 代码。让我们再看一个例子。</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/80/80c04d7afe33fd0f4d34f391847a8e75.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/ff/ff83f9e4bfead1f156366ce957063170.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">另一个 PyScript 示例(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">在这里,我们写了一些需要计算的代码,可以看到,脚本得到了正确的执行。</span></p><h1 data-type="heading" data-id="heading1"><span style="color: #494949">py-env 标签</span></h1><p data-type="paragraph"><span style="color: #494949">在编写更复杂的代码时,就需要使用第三方库。在这种情况下,我们可以利用</span><code data-type="codeinline">py-env</code><span style="color: #494949">标签。你可能已经猜到的,env 是 environment 的缩写。</span><code data-type="codeinline">py-env</code><span style="color: #494949">标签中列出了运行代码所需的 Python 包。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">你可能知道,许多数据科学家都使用 pandas 进行数据处理工作。让我们看看下面的例子。</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/81/81a2e07ff71a317924c7664120862b6e.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/df/df79380011e061d1030cfe721b89989b.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">使用包的 PyScript(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">如你所见,我们在</span><code data-type="codeinline">py-env</code><span style="color: #494949">标签中指定了依赖项(即 Pandas),该标签包含在</span><code data-type="codeinline">head</code><span style="color: #494949">标签中。如果页面需要多个依赖项,可以在这里把它们全部列出:</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><div data-type="codeblock"><div data-codeblock-wrap><div data-codeblock-codes><pre lang="text" data-origin="pm_code_preview"><code data-type=codeline><span class="hljs-tag"><<span class="hljs-name">py-env</span>></span></code><code data-type=codeline> - pandas</code><code data-type=codeline> - matplotlib</code><code data-type=codeline> - numpy</code><code data-type=codeline><span class="hljs-tag"></<span class="hljs-name">py-env</span>></span></code></pre></div><div data-codeblock-copy>复制代码</div><div data-codeblock-index><div data-codeblock-number="1"></div><div data-codeblock-number="2"></div><div data-codeblock-number="3"></div><div data-codeblock-number="4"></div><div data-codeblock-number="5"></div></div></div></div><p data-type="paragraph"><span style="color: #494949">如你所见,在</span><code data-type="codeinline">py-script</code><span style="color: #494949">标签中,我们确实可以使用 Pandas 库来创建一个</span><code data-type="codeinline">DataFrame</code><span style="color: #494949">对象。然而,当我们把打印出来时就会发现,它是一个单行,而不是一个结构化的数据表。没有一个适当的结构,我们就无法理解这些数据。幸运的是,我们可以使用</span><code data-type="codeinline">write</code><span style="color: #494949">函数(下文会讨论)。</span></p><h1 data-type="heading" data-id="heading2"><span style="color: #494949">将内容写入指定标签</span></h1><p data-type="paragraph"><span style="color: #494949">除了 Python 中的标准打印函数</span><code data-type="codeinline">print</code><span style="color: #494949">,作为脚本的一部分,PyScript 有自己的</span><code data-type="codeinline">write</code><span style="color: #494949">函数,可以将数据发送到页面上指定的 Web 元素中。请看下面的例子:</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/54/548175e28244c2b86e5b35db19bdf9ff.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/f6/f612d73015a7a21224b20561347bf3b2.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">PyScript 写函数 write(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">与之前的例子相比,上述代码片段有两个重大变化:</span></p><ul data-type="bulletedlist"><li data-type="listitem"><p data-type="paragraph"><span style="color: #494949">我们现在定义了一个 id 为</span><code data-type="codeinline">"DataFrame"</code>的<code data-type="codeinline">div</code>,这样稍后就可以引用。</p></li><li data-type="listitem"><p data-type="paragraph"><span style="color: #494949">在</span><code data-type="codeinline">py-script</code>标签中,我们创建一个与之前相同的<code data-type="codeinline">DataFrame</code>对象。但现在,我们不是调用<code data-type="codeinline">print</code>,而是调用<code data-type="codeinline">pyscript.write</code>函数,请求 PyScript 处理并在<code data-type="codeinline">"DataFrame"</code>中显示<code data-type="codeinline">DataFrame</code>对象。从输出可以看到,我们现在有一个结构化的表格了。</p></li></ul><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><code data-type="codeinline">write</code><span style="color: #494949">函数不仅能够打印表格,还能够打印数字。下面的例子向你展示了我们如何使用</span><code data-type="codeinline">matplotlib</code><span style="color: #494949">(一个流行的 Python 包,用于数据可视化)来显示由 Python 创建的图。</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/67/67aa8e871dffbace046e760e4249ec4d.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/9c/9c5c42ab5a569023ab63df58dfbedcab.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">PyScript 打印图(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">如你所见,</span><code data-type="codeinline">write</code><span style="color: #494949"> 函数以期望的方式显示了图。</span></p><h1 data-type="heading" data-id="heading3"><span style="color: #494949">py-repl 标签</span></h1><p data-type="paragraph"></p><p data-type="paragraph"><span style="color: #494949">Python 学习的最好方法之一是使用 REPL:读取(Read)、求值(Evaluate)、打印(Print)和循环(Loop)。也就是说,使用一个交互式的 Python 控制台,输入一些代码,Python 对其进行求值并打印适当的输出,然后重复这个过程。Web 页面也可以提供这样的 REPL 环境,比如 Jupyter Notebook。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">PyScript 可以使用</span><code data-type="codeinline">py-repl</code><span style="color: #494949">标签提供与此类似的东西。在这个元素中,你可以让用户自己编写代码,也可以以编程方式输入代码。请看下面的例子:</span></p><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/b6/b66645cc4bc41c399659afaff9f3d7ee.png" alt data-type="image"/><p data-type="paragraph"></p><img src="https://static001.geekbang.org/infoq/a7/a716f3728f2d077ead11eab508d64477.png" alt data-type="image"/><p data-type="paragraph" data-align-center ><span style="color: #494949"><span style="font-size: 9px">PyScript REPL(图片由作者提供)</span></span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">如你所见,上图中有一个单元格,其中包括在</span><code data-type="codeinline">py-repl</code><span style="color: #494949">标签中指定的代码。值得注意的是,单元格中的代码可以引用我们之前在</span><code data-type="codeinline">py-script</code><span style="color: #494949">标签中定义的变量。一切看起来都很协调。</span></p><h1 data-type="heading" data-id="heading4"><span style="color: #494949">感想</span></h1><p data-type="paragraph"></p><p data-type="paragraph"><span style="color: #494949">本文介绍的内容是现阶段 PyScript 所能提供的主要亮点。它似乎是一个很有前途的产品,因为它提供了一个灵活的框架,让 Python 程序员可以在没有太多 Web 开发知识的情况下创建 Web 应用。然而,也有其他类似的成功的产品,因此,竞争会很激烈。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">例如,如果我需要为自己的数据科学项目创建一个 Web 应用,我就会直接使用 Streamlit。它的功能已经相对成熟。请注意,虽然都与 Web 开发有关,但 PyScript 和 Streamlit 属于不同的产品系。PyScript 应该更通用,因为它的目标是让你可以在任何网页上嵌入任何 Python 代码,Streamlit 做不到这一点。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">在 PyScript 为更多的人所接受之前,它有几个问题必须解决。例如,Web 页面的加载速度非常慢。如果你尝试跟随本教程运行代码,可能就会注意到,在 Web 页面的显示会有一个明显的滞后。</span></p><p data-type="paragraph"><span style="color: #494949"> </span></p><p data-type="paragraph"><span style="color: #494949">尽管如此,我还是觉得这个产品会继续发展,我的信心主要来自于它的开发者——给我们带来极好的 Anaconda 工具的 Anaconda 团队。</span></p><p data-type="paragraph"></p><p data-type="paragraph"><span style="color: #333333"><i>本文最初发布于 Better Programming。</i></span></p><p data-type="paragraph"></p><p data-type="paragraph"><span style="color: #494949">查看英文原文:</span><a href="https://betterprogramming.pub/running-python-script-on-the-web-using-pyscript-the-next-big-thing-8ace9543d75" title="xxx" data-type="link">Running Python Scripts on the Web Using PyScript</a></p></div></div><!----><!--]--><span></span></div><!----></article><span></span><!--]--><div class=""><!--[--><div class="comment-skeleton" data-v-66ad80be><div class="skeleton-header" data-v-66ad80be><div class="skeleton-title-bar" data-v-66ad80be></div><div class="skeleton-title-text" data-v-66ad80be></div><div class="skeleton-title-number" data-v-66ad80be></div></div><div class="skeleton-form" data-v-66ad80be><div class="skeleton-input" data-v-66ad80be></div><div class="skeleton-button" data-v-66ad80be></div></div><div class="skeleton-list" data-v-66ad80be><!--[--><div class="skeleton-item" data-v-66ad80be><div class="skeleton-avatar" data-v-66ad80be></div><div class="skeleton-content" data-v-66ad80be><div class="skeleton-username" data-v-66ad80be></div><div class="skeleton-text" data-v-66ad80be><!--[--><div class="skeleton-line" data-v-66ad80be></div><div class="skeleton-line" data-v-66ad80be></div><div class="skeleton-line" data-v-66ad80be></div><!--]--></div><div class="skeleton-actions" data-v-66ad80be><div class="skeleton-action-item" data-v-66ad80be></div><div class="skeleton-action-item" data-v-66ad80be></div><div class="skeleton-action-item" data-v-66ad80be></div></div></div></div><!--]--></div></div><!--]--><span></span><!--[--><!--]--></div></div><div class="_content-side_13g2e_76" is-immersed="false"><!--[--><!--[--><!--]--><!--]--></div></div><span></span></div><!--]--><span></span><div id="check-bottom-bar"></div><div class="_layout-footer_4ccit_401"><div class="footer" data-v-73b2c941><!--[--><ul class="layout-content" data-v-73b2c941><li class="theme" data-v-73b2c941><div class="logo" data-v-73b2c941><img src="https://static001.geekbang.org/static/web/nuxt/www.infoq.cn/logo.BJF4WFeC.png" alt="logo" data-v-73b2c941><p data-v-73b2c941>促进软件开发及相关领域知识与创新的传播</p></div></li><!--[--><li data-v-73b2c941><dl class="footer-nav" data-v-73b2c941><dt data-v-73b2c941></dt><!--[--><dd data-v-73b2c941><!----><a href="https://www.infoq.cn/about" target="_blank" rel="noopener nofollow" data-v-73b2c941>关于我们</a></dd><dd data-v-73b2c941><!----><a href="https://www.infoq.cn/contribute" target="_blank" rel="noopener nofollow" data-v-73b2c941>我要投稿</a></dd><dd data-v-73b2c941><!----><a href="https://www.geekbang.org/partner" target="_blank" rel="noopener nofollow" data-v-73b2c941>合作伙伴</a></dd><dd data-v-73b2c941><!----><a href="https://www.lagou.com/gongsi/j43775.html" target="_blank" rel="noopener nofollow" data-v-73b2c941>加入我们</a></dd><dd data-v-73b2c941><!----><a href="https://infoq.cn/official/account" target="_blank" rel="noopener nofollow" data-v-73b2c941>关注我们</a></dd><!--]--></dl></li><li data-v-73b2c941><dl class="footer-nav" data-v-73b2c941><dt data-v-73b2c941>联系我们</dt><!--[--><dd data-v-73b2c941><!----><a href="mailto:editors@geekbang.com" target="_blank" rel="noopener nofollow" data-v-73b2c941>内容投稿:editors@geekbang.com</a></dd><dd data-v-73b2c941><!----><a href="mailto:hezuo@geekbang.com" target="_blank" rel="noopener nofollow" data-v-73b2c941>业务合作:hezuo@geekbang.com</a></dd><dd data-v-73b2c941><!----><a href="mailto:feedback@geekbang.com" target="_blank" rel="noopener nofollow" data-v-73b2c941>反馈投诉:feedback@geekbang.com</a></dd><dd data-v-73b2c941><!----><a href="mailto:zhaopin@geekbang.com" target="_blank" rel="noopener nofollow" data-v-73b2c941>加入我们:zhaopin@geekbang.com</a></dd><dd data-v-73b2c941><!----><span data-v-73b2c941>联系电话:010-64738142</span></dd><dd data-v-73b2c941><!----><span data-v-73b2c941>地址:北京市朝阳区望京北路9号2幢7层A701</span></dd><!--]--></dl></li><li data-v-73b2c941><dl class="footer-nav" data-v-73b2c941><dt data-v-73b2c941>InfoQ 近期会议</dt><!--[--><dd data-v-73b2c941><!----><a href="https://qcon.infoq.cn/2026/beijing?utm_source=infoq&utm_medium=footer" target="_blank" rel="noopener nofollow" data-v-73b2c941>北京 · QCon 全球软件开发大会 2026.4.16-18</a></dd><dd data-v-73b2c941><!----><a href="https://aicon.infoq.cn/2026/shanghai?utm_source=infoq&utm_medium=footer" target="_blank" rel="noopener nofollow" data-v-73b2c941>上海 · AICon 全球人工智能开发与应用大会 2026.6.26-27</a></dd><!--]--></dl></li><li data-v-73b2c941><dl class="footer-nav" data-v-73b2c941><dt data-v-73b2c941>全球 InfoQ</dt><!--[--><dd data-v-73b2c941><img src="https://static001.infoq.cn/resource/image/55/38/55cd81623e36f5ab7a7db74d60b74838.png" alt="会议图片" data-v-73b2c941><a href="https://www.infoq.com/" target="_blank" rel="noopener nofollow" data-v-73b2c941>InfoQ En</a></dd><dd data-v-73b2c941><img src="https://static001.infoq.cn/resource/image/95/13/95fe851c02c86120e9037eada6a36d13.png" alt="会议图片" data-v-73b2c941><a href="https://www.infoq.com/jp/" target="_blank" rel="noopener nofollow" data-v-73b2c941>InfoQ Jp</a></dd><dd data-v-73b2c941><img src="https://static001.infoq.cn/resource/image/2a/3e/2aa440b6d94e94f64c508f16da38933e.png" alt="会议图片" data-v-73b2c941><a href="http://www.infoq.com/fr/" target="_blank" rel="noopener nofollow" data-v-73b2c941>InfoQ Fr</a></dd><dd data-v-73b2c941><img src="https://static001.infoq.cn/resource/image/4e/1e/4e737ce82bc7c8a1c2f2307bcea9a11e.png" alt="会议图片" data-v-73b2c941><a href="http://www.infoq.com/br/" target="_blank" rel="noopener nofollow" data-v-73b2c941>InfoQ Br</a></dd><!--]--></dl></li><!--]--></ul><!--]--><div class="copyright" data-v-73b2c941> Copyright © 2026, Geekbang Technology Ltd. All rights reserved. 极客邦控股(北京)有限公司 | <a target="_blank" class="icp" href="https://beian.miit.gov.cn/" data-v-73b2c941>京 ICP 备 16027448 号 - 5</a><a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502039052" data-v-73b2c941><img src="data:image/png;base64,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" alt="京公网安备" data-v-73b2c941><span data-v-73b2c941>京公网安备 11010502039052号</span></a><a target="_blank" class="icp" href="https://time.geekbang.org/hybrid/certificates" data-v-73b2c941> | 产品资质</a></div></div></div></div><span></span></div></div></div><div id="teleports"></div><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="true" id="__NUXT_DATA__">[["ShallowReactive",1],{"data":2,"state":1702,"once":1704,"_errors":1705,"serverRendered":642,"path":1707,"pinia":1708},["ShallowReactive",3],{"navConfig":4,"headerMenuList":481,"articleDetail":635},{"notice":5,"header":8,"footer":79,"bus":145,"web":448},{"content":6,"end_time":7,"link":6,"start_time":7,"time_now":7},"",0,[9,15,18,22,25,28,32,36,40,43,47,50,53,58,62,66,70,74],{"alias":10,"child_list":11,"icon":6,"id":12,"link":6,"name":13,"type":14}," industrynews",null,147,"企业动态",1,{"alias":6,"child_list":11,"icon":6,"id":16,"link":6,"name":17,"type":14},1168,"行业深度",{"alias":19,"child_list":11,"icon":6,"id":20,"link":6,"name":21,"type":14},"AI&LLM",31,"AI&大模型",{"alias":6,"child_list":11,"icon":6,"id":23,"link":6,"name":24,"type":14},1207,"出海",{"alias":6,"child_list":11,"icon":6,"id":26,"link":6,"name":27,"type":14},1174,"后端",{"alias":6,"child_list":29,"icon":6,"id":30,"link":6,"name":31,"type":14},[],1187,"芯片&算力",{"alias":33,"child_list":11,"icon":6,"id":34,"link":6,"name":35,"type":14},"architecture",8,"架构",{"alias":37,"child_list":11,"icon":6,"id":38,"link":6,"name":39,"type":14},"bigdata",15,"大数据",{"alias":6,"child_list":11,"icon":6,"id":41,"link":6,"name":42,"type":14},1195,"软件工程",{"alias":44,"child_list":11,"icon":6,"id":45,"link":6,"name":46,"type":14},"cloud-computing",11,"云计算",{"alias":6,"child_list":11,"icon":6,"id":48,"link":6,"name":49,"type":14},1208,"大前端",{"alias":6,"child_list":11,"icon":6,"id":51,"link":6,"name":52,"type":14},1204,"管理/文化",{"child_list":54,"icon":6,"id":7,"link":55,"name":56,"type":57},[],"https://www.infoq.cn/content-center","企业服务案例",3,{"child_list":59,"icon":6,"id":7,"link":60,"name":61,"type":57},[],"https://time.geekbang.org","极客时间",{"child_list":63,"icon":6,"id":7,"link":64,"name":65,"type":57},[],"https://u.geekbang.org/?utm_source=infoq_web&utm_medium=menu&utm_term=infoqwebmenu","极客时间训练营",{"child_list":67,"icon":6,"id":7,"link":68,"name":69,"type":57},[],"https://b.geekbang.org/?utm_source=infoqweb&utm_medium=menu&gk_source=infoqwebmenu_2024092401","企业培训",{"child_list":71,"icon":6,"id":7,"link":72,"name":73,"type":57},[],"https://tgo.infoq.cn/","高端学员",{"child_list":75,"icon":76,"id":7,"link":77,"name":78,"type":57},[],"https://static001.infoq.cn/resource/image/52/fa/5248de588832bcf63b5a9570caa2b0fa.png","https://www.infoq.cn/app/download?utm_source=infoq_nav_web&utm_medium=infoq_nav_web&utm_term=infoq_nav_web","App下载",[80,98,117,126],{"list":81,"name":97},[82,85,88,91,94],{"name":83,"link":84,"image":6},"关于我们","https://www.infoq.cn/about",{"name":86,"link":87,"image":6},"我要投稿","https://www.infoq.cn/contribute",{"name":89,"link":90,"image":6},"合作伙伴","https://www.geekbang.org/partner",{"name":92,"link":93,"image":6},"加入我们","https://www.lagou.com/gongsi/j43775.html",{"name":95,"link":96,"image":6},"关注我们","https://infoq.cn/official/account","InfoQ",{"list":99,"name":116},[100,103,106,109,112,114],{"name":101,"link":102,"image":6},"内容投稿:editors@geekbang.com","mailto:editors@geekbang.com",{"name":104,"link":105,"image":6},"业务合作:hezuo@geekbang.com","mailto:hezuo@geekbang.com",{"name":107,"link":108,"image":6},"反馈投诉:feedback@geekbang.com","mailto:feedback@geekbang.com",{"name":110,"link":111,"image":6},"加入我们:zhaopin@geekbang.com","mailto:zhaopin@geekbang.com",{"name":113,"link":6,"image":6},"联系电话:010-64738142",{"name":115,"link":6,"image":6},"地址:北京市朝阳区望京北路9号2幢7层A701","联系我们",{"list":118,"name":125},[119,122],{"name":120,"link":121,"image":6},"北京 · QCon 全球软件开发大会 2026.4.16-18","https://qcon.infoq.cn/2026/beijing?utm_source=infoq&utm_medium=footer",{"name":123,"link":124,"image":6},"上海 · AICon 全球人工智能开发与应用大会 2026.6.26-27","https://aicon.infoq.cn/2026/shanghai?utm_source=infoq&utm_medium=footer","InfoQ 近期会议",{"list":127,"name":144},[128,132,136,140],{"name":129,"link":130,"image":131},"InfoQ En","https://www.infoq.com/","https://static001.infoq.cn/resource/image/55/38/55cd81623e36f5ab7a7db74d60b74838.png",{"name":133,"link":134,"image":135},"InfoQ Jp","https://www.infoq.com/jp/","https://static001.infoq.cn/resource/image/95/13/95fe851c02c86120e9037eada6a36d13.png",{"name":137,"link":138,"image":139},"InfoQ Fr","http://www.infoq.com/fr/","https://static001.infoq.cn/resource/image/2a/3e/2aa440b6d94e94f64c508f16da38933e.png",{"name":141,"link":142,"image":143},"InfoQ Br","http://www.infoq.com/br/","https://static001.infoq.cn/resource/image/4e/1e/4e737ce82bc7c8a1c2f2307bcea9a11e.png","全球 InfoQ",[146,153,160,167,173,180,186,192,198,205,211,218,224,231,236,242,248,254,260,266,272,278,284,289,296,302,309,315,321,327,333,339,345,351,356,362,369,375,381,386,392,397,401,406,412,418,425,430,436,442],{"end_time":147,"img":148,"link":149,"location":150,"name":151,"start_time":152},1777478399,"https://static001.infoq.cn/resource/image/5b/71/5b923cb0f1d54c37e897b79a5f450371.png","https://www.infoq.cn/form/?id=3074&utm_source=web&sign=iq_69e5d83a017ed","线上直播","亚马逊云科技新品发布全球直播",1777392000,{"end_time":154,"img":155,"link":156,"location":157,"name":158,"start_time":159},1778688000,"https://static001.infoq.cn/resource/image/4e/e4/4ee8726a137ac24b4c4f168846f353e4.png","https://create2026.events.net.cn/#/","北京国家会议中心二期","Create2026百度AI开发者大会",1778601600,{"end_time":161,"img":162,"link":163,"location":164,"name":165,"start_time":166},1778687999,"https://static001.infoq.cn/resource/image/77/1a/77ef30ee4075cdf1895953f49320641a.png","https://xie.infoq.cn/article/6dd68fc43dcf05b4634800743?utm_source=home_write_related&utm_medium=article","线上","2026写作社区第一期",1776009600,{"end_time":168,"img":169,"link":170,"location":164,"name":171,"start_time":172},1777564799,"https://static001.infoq.cn/resource/image/46/bd/46772038735yy4da5a4418f96b406cbd.jpg","https://maas.xfyun.cn/modelSquare?ch=maas-infoq-G9n8","讯飞星辰maas平台推广",1772985600,{"end_time":174,"img":175,"link":176,"location":177,"name":178,"start_time":179},1774627199,"https://static001.infoq.cn/resource/image/18/63/1898936d088123092b2ac0478bc72963.png","https://qdrl.qq.com/VDybhsBX","上海","2026腾讯云城市峰会•上海站",1774540800,{"end_time":181,"img":182,"link":183,"location":164,"name":184,"start_time":185},1769702399,"https://static001.infoq.cn/resource/image/d4/9c/d4e5067b12778600a0c7dab53868949c.png","https://www.infoq.cn/form/?id=2995&utm_source=infoq&sign=iq_6964b8f50a6d2","2025 re:Invent 精彩回顾及新品解读",1768320000,{"end_time":187,"img":188,"link":189,"location":164,"name":190,"start_time":191},1864569599,"https://static001.infoq.cn/resource/image/df/d7/df1a288f1e97e615ba35cae4a9127ed7.jpg","https://www.infoq.cn/space/snowflake","Snowflake 中文社区上线!",1766073600,{"end_time":193,"img":194,"link":195,"location":164,"name":196,"start_time":197},1766937599,"https://static001.infoq.cn/resource/image/6c/9a/6c9e1e98a21c06cfyy6a4236e8dc0e9a.png","https://developer.huawei.com/consumer/cn/?ha_source=InfoQ&ha_sourceId=70000011","鸿蒙开发者阵营 智能生态新图景!",1766332800,{"end_time":199,"img":200,"link":201,"location":202,"name":203,"start_time":204},1766246399,"https://static001.infoq.cn/resource/image/36/ec/36d8b16de68a2aa3c2a3ce732d318dec.png","https://www.infoq.cn/form/?id=2926&utm_source=gw&sign=iq_6938cf671ced6","北京","出海时代的基础设施构建与模型场景实践",1765296000,{"end_time":206,"img":207,"link":208,"location":164,"name":209,"start_time":210},1763481599,"https://static001.infoq.cn/resource/image/23/f9/23daea7659yye0e9e4bd55733a413bf9.png","https://www.infoq.cn/form/?id=2876&utm_source=infoq&sign=iq_690dc735a6bc5","你的 Agentic Al 队友已上线",1763049600,{"end_time":212,"img":213,"link":214,"location":215,"name":216,"start_time":217},1720799999,"https://static001.infoq.cn/resource/image/8d/77/8d3b0287db45117a2d1abbd8061fd177.jpg","https://www.infoq.cn/event/?id=286&utm_source=1&sign=iq_667d3d12723c8","深圳","火山引擎金融大模型城市环游·深圳站",1720713600,{"end_time":219,"img":220,"link":221,"location":177,"name":222,"start_time":223},1761321599,"https://static001.infoq.cn/resource/image/d5/3d/d538764e308a60384168b28e0f394f3d.png","https://www.infoq.cn/form/?id=2827&utm_source=huodongdabenying&sign=iq_68ef417882d95","【QCon专场】AI双引擎:业务增长与安全重构",1761235200,{"end_time":225,"img":226,"link":227,"location":228,"name":229,"start_time":230},1761235199,"https://static001.infoq.cn/resource/image/cb/f7/cbbyy3d4ea8d4b3fcaa37e7140e120f7.png","https://jinshuju.com/f/MkXdNt?x_field_1=Amazon1","线下丨上海","QCon 亚马逊云专场:AI IDE重构开发想象",1761148800,{"end_time":232,"img":233,"link":195,"location":164,"name":234,"start_time":235},1763654399,"https://static001.infoq.cn/resource/image/15/ca/15b2f71676f5f3928ff5daeb21333dca.png","加入鸿蒙开发者阵营 开拓智能生态新蓝海!",1759248000,{"end_time":237,"img":238,"link":239,"location":164,"name":240,"start_time":241},1761840000,"https://static001.infoq.cn/resource/image/4f/41/4f7808d67c8e31b93d6fc1223716d241.jpg","https://www.infoq.cn/article/Xc1pH6JxKvgK7zFI8wFy","Snowflake 免费培训!欢迎参与!",1758988800,{"end_time":243,"img":244,"link":245,"location":164,"name":246,"start_time":247},1760975999,"https://static001.infoq.cn/resource/image/4e/d2/4e80781158e74fba43ba56d1f1d3ffd2.jpg","https://competition.atomgit.com/competitionInfo?id=49f0205ecd5c81c96381829456fef6a5&utm_source=inf1#heading-0-0","vivo大会",1760889600,{"end_time":249,"img":250,"link":251,"location":164,"name":252,"start_time":253},1763308799,"https://static001.infoq.cn/resource/image/b8/38/b844639e4b68d24036a3f1d4ba277038.png","https://www.infoq.cn/zones/fintechathon/campus2025/?id=2789&utm_source=guanwang&sign=iq_68d3b023255cf","2025 深圳国际金融科技大赛",1758816000,{"end_time":255,"img":256,"link":257,"location":164,"name":258,"start_time":259},1758038400,"https://static001.infoq.cn/resource/image/ba/2a/ba3fe8d0e31bdccf7c76f44f3157b12a.jpg","https://qdrl.qq.com/2lbhIc4r","2025腾讯全球数字生态大会",1757952000,{"end_time":261,"img":262,"link":263,"location":177,"name":264,"start_time":265},1753891199,"https://static001.infoq.cn/resource/image/d4/67/d4824160c0c26a3b04edf9dc0f2faa67.jpg","https://online2025.worldaic.com.cn/","WAIC",1753459200,{"end_time":267,"img":268,"link":269,"location":202,"name":270,"start_time":271},1756483200,"https://static001.infoq.cn/resource/image/17/18/1732a4bcdbeda67f98f66a33yy246b18.jpg","https://digital.cloud.baidu.com/mF/ems/none/3crBbdbaUbAgQdv8tF9ktG/HWSe9KTq83gsvLvEmWUQQY1","2025百度云智大会",1756310400,{"end_time":273,"img":274,"link":275,"location":164,"name":276,"start_time":277},1754496000,"https://static001.infoq.cn/resource/image/03/cc/03bec4d2ba678277fcaaeecc405895cc.png","https://www.infoq.cn/form/?id=2757&utm_source=infoq&sign=iq_688352ece260f","2025亚马逊云科技峰会精华回顾",1753632000,{"end_time":279,"img":280,"link":281,"location":164,"name":282,"start_time":283},1753977599,"https://static001.infoq.cn/resource/image/a5/d3/a5518edc427e92079fcd7956daabbcd3.png","https://www.infoq.cn/zones/awscertification-june/","亚马逊培训认证6月",1748707200,{"end_time":279,"img":285,"link":286,"location":164,"name":287,"start_time":288},"https://static001.infoq.cn/resource/image/00/cb/0049b66c781ca3f5b8d5d4de60dde7cb.png","https://qr20.cn/EoJnXW","即刻成为鸿蒙应用开发者 携手共拓鸿蒙世界!",1749398400,{"end_time":290,"img":291,"link":292,"location":293,"name":294,"start_time":295},1749571199,"https://static001.infoq.cn/resource/image/4a/26/4aa6fc20bb1eyy67772eb4a09873e026.png","https://qdrl.qq.com/cljVFWT9","青岛","2025 腾讯云城市峰会",1749484800,{"end_time":297,"img":298,"link":299,"location":177,"name":300,"start_time":301},1750348800,"https://static001.infoq.cn/resource/image/cf/43/cfb7236133b4736ba0a11be8cfae3043.png","https://www.infoq.cn/event/?id=298","亚马逊云SUMMIT",1750262400,{"end_time":303,"img":304,"link":305,"location":306,"name":307,"start_time":308},1747411200,"https://static001.infoq.cn/resource/image/ef/8c/efe32080fc748d5a07e569f08725bf8c.png","https://www.infoq.cn/form/?id=2679&utm_source=huodongdabenying&sign=iq_682166ae7775c","广州德事商务中心","2025 iFLYTEK 开发者TALK广州站",1747065600,{"end_time":310,"img":311,"link":312,"location":164,"name":313,"start_time":314},1745596799,"https://static001.infoq.cn/resource/image/61/57/6192fd75e85bee189d6cb7a3c34e9957.png","https://cloud.baidu.com/product-s/qianfan_home?track=44ca1a7f797708dfe98a81110b458fe0edf9d479e262c870","百度智能云干帆应用开发平台",1745510400,{"end_time":316,"img":317,"link":318,"location":177,"name":319,"start_time":320},1725638399,"https://static001.infoq.cn/resource/image/f6/f8/f60e03ca867228dd431db0e9f30138f8.png","https://register.inclusionconf.com/invitelogin?inviteCode=FS_j3lZdwf1&channelType=major","跨越安卓和iOS:开启国产OS移动开发新时代",1725552000,{"end_time":322,"img":323,"link":324,"location":164,"name":325,"start_time":326},1744819199,"https://static001.infoq.cn/resource/image/b9/20/b9c4f00bf0f085ef864eb89dae26b820.png","https://static001.geekbang.org/resource/image/4c/f4/4c06d0d4205fb11551f60871f858a9f4.png","AIGC时代,研发人破局转型之道",1744732800,{"end_time":328,"img":329,"link":330,"location":202,"name":331,"start_time":332},1744300799,"https://static001.infoq.cn/resource/image/bf/8b/bf2be549b7ef31367ce882cef0c80f8b.png","https://www.infoq.cn/form/?id=2630&utm_source=huodongdabenying&sign=iq_67e4cdd0c38d0","HarmonyOS NEXT创新特性与行业实践",1744214400,{"end_time":334,"img":335,"link":336,"location":164,"name":337,"start_time":338},1749139199,"https://static001.infoq.cn/resource/image/8f/5a/8f42b5102d2a6bb01b1yy25de678c05a.jpg","https://www.infoq.cn/article/EiZAWhIT5U9YRPi893NR","开源合规精选培训课程",1745596800,{"end_time":340,"img":341,"link":342,"location":164,"name":343,"start_time":344},1747843199,"https://static001.infoq.cn/resource/image/f4/e7/f4ea438f30b686f709187b789e4a57e7.png","https://sourl.co/geWFmz","亚马逊AI认证4月",1742486400,{"end_time":346,"img":347,"link":348,"location":164,"name":349,"start_time":350},1741881600,"https://static001.infoq.cn/resource/image/b3/d6/b3a02c6ea0269f79af48167yy01eced6.png","https://www.infoq.cn/event/?id=294","为突破而构建数据燃动AI",1739980800,{"end_time":352,"img":353,"link":195,"location":164,"name":354,"start_time":355},1738252800,"https://static001.infoq.cn/resource/image/0b/5a/0b27a8d162d93b7c6ea3e08b60e9f65a.png","即刻加入,成为harmony OS应用开发者",1735056000,{"end_time":357,"img":358,"link":359,"location":202,"name":360,"start_time":361},1734105599,"https://static001.infoq.cn/resource/image/3a/24/3a84c8b7aa904bf46177ff84e8c6cb24.jpg","https://www.infoq.cn/event/?id=293","Al for Data 与大模型训练加速实践 专场",1734019200,{"end_time":363,"img":364,"link":365,"location":366,"name":367,"start_time":368},1734278399,"https://static001.infoq.cn/resource/image/76/0c/76f5522fb34a5b0f23092d90a043770c.png","https://www.infoq.cn/form/?id=2460&utm_source=hd&sign=iq_6746f157b717f","广州","探索数据生态协同创新 Meetup",1734192000,{"end_time":370,"img":371,"link":372,"location":164,"name":373,"start_time":374},1734710399,"https://static001.infoq.cn/resource/image/22/dc/2211300cc2d2acfda040922ef5a6a1dc.png","https://www.infoq.cn/article/otlWQdLRB7ci1K1TPdbZ","字节跳动开源云原生数据仓库ByConity众测",1732636800,{"end_time":376,"img":377,"link":378,"location":177,"name":379,"start_time":380},1733587199,"https://static001.infoq.cn/resource/image/3f/a9/3f7cd8a638c24412fe295d810ae218a9.jpeg","https://www.huodongxing.com/event/6783033754700?qd=OpenTiny","2024华为云开源开发者论坛",1733500800,{"end_time":376,"img":382,"link":383,"location":164,"name":384,"start_time":385},"https://static001.infoq.cn/resource/image/f9/74/f93dd0b1242137659f8e5dd00decdb74.png","https://dev.amazoncloud.cn/competition/detail/genaicompetition?visitfrom=InfoQ1","第三届中国生成式 AI 应用创新挑战赛推广",1732204800,{"end_time":387,"img":388,"link":389,"location":164,"name":390,"start_time":391},1732982399,"https://static001.infoq.cn/resource/image/7e/0d/7e1428b18yy9b081542b4ef08a00ce0d.png","https://jsj.top/f/xU2Gmv","Amazon Q Developer 体验调研",1731513600,{"end_time":393,"img":394,"link":395,"location":164,"name":396,"start_time":391},1734019199,"https://static001.infoq.cn/resource/image/ff/c3/ff1287bf2a34793531813bb811896ac3.png","https://dev.amazoncloud.cn/associate-retake?visitfrom=infoq1","亚马逊云科技助理级认证活动",{"end_time":387,"img":398,"link":399,"location":164,"name":400,"start_time":391},"https://static001.infoq.cn/resource/image/3f/94/3f72e2c02d4a203980f89f3f6e813694.png","https://dev.amazoncloud.cn/learn/aitalent/obtainCertificate?visitfrom=infoQ1","亚马逊云科技AI从业者认证",{"end_time":387,"img":402,"link":403,"location":164,"name":404,"start_time":405},"https://static001.infoq.cn/resource/image/38/9c/38f2a6d31f52ef17781678c0a82dde9c.png","https://cloud.baidu.com/campaign/qianfan/index.html?track=98df3bcb86b429860e9c9fdca4fd2edc50b7882e882c090f","千帆大模型平台特惠专场",1731427200,{"end_time":407,"img":408,"link":409,"location":177,"name":410,"start_time":411},1731427199,"https://static001.infoq.cn/resource/image/81/b4/81e10cbdc5636f5ca57fae44f044b1b4.png","https://baiduworld.baidu.com","百度世界大会",1731340800,{"end_time":413,"img":414,"link":415,"location":164,"name":416,"start_time":417},1732463999,"https://static001.infoq.cn/resource/image/d1/a0/d16ecacda10d8614fa0a2928f04f0da0.png","https://mp.weixin.qq.com/s/LmG1_1NTkvigdewqE-LQwA","蚂蚁 agentUniverse 征文活动",1729699200,{"end_time":419,"img":420,"link":421,"location":422,"name":423,"start_time":424},1729785599,"https://static001.infoq.cn/resource/image/a4/96/a4c947d9a4ddaed63c2ab7298285e996.jpg","https://hdxu.cn/fimi","武汉","鸿蒙1024程序员节",1729526400,{"end_time":426,"img":427,"link":428,"location":164,"name":400,"start_time":429},1731600000,"https://static001.infoq.cn/resource/image/07/e4/07336456945434c08c91f748f61ba3e4.png","https://sourl.co/q3rci3",1728835200,{"end_time":431,"img":432,"link":433,"location":164,"name":434,"start_time":435},1735660799,"https://static001.infoq.cn/resource/image/6b/c4/6be7d03702b715e359c0116d8e2e0dc4.jpg","https://aistudio.baidu.com/intro/awards","星河产业应用创新奖",1728489600,{"end_time":437,"img":438,"link":439,"location":164,"name":440,"start_time":441},1729007999,"https://static001.infoq.cn/resource/image/ba/43/baecfa1b25b5c028f12cdf7a953c7d43.jpg","https://www.volcengine.com/contact/videocloud?utm_campaign=20241015&utm_content=shipinyunjishudahui&utm_medium=in_mkt&utm_source=event&utm_term=infoQ","2024火山引擎视频云技术大会",1728403200,{"end_time":443,"img":444,"link":445,"location":164,"name":446,"start_time":447},1727711999,"https://static001.infoq.cn/resource/image/90/d5/900f755fb922f23ac75d1e1e0e0b93d5.png","https://developer.huawei.com/consumer/cn/training/classDetail/e6608f8c416f427a847ecf717e9ed8d4?ha_source=InfoQ&ha_sourceId=70000011","HarmonyOS开发者基础认证",1721232000,[449,452,455,458,461,464,467,469,472,475,478],{"icon":6,"link":450,"name":451},"https://www.infoq.cn/","首页",{"icon":76,"link":453,"name":454},"https://www.infoq.cn/archives","AI会议",{"icon":76,"link":456,"name":457},"https://time.geekbang.org/resource?pt=1","AI课程",{"icon":76,"link":459,"name":460},"https://agicamp.com/ranking-list/?utm_source=infoqbar","AI应用",{"icon":6,"link":462,"name":463},"https://www.infoq.cn/zones/chinatechawards2025/","AI榜单",{"icon":6,"link":465,"name":466},"https://www.infoq.cn/zones/harmonyos/","HarmonyOS",{"icon":76,"link":251,"name":468},"AI大赛",{"icon":6,"link":470,"name":471},"https://www.infoq.cn/minibook","报告",{"icon":6,"link":473,"name":474},"https://www.infoq.cn/video","视频",{"icon":6,"link":476,"name":477},"https://zhinan.geekbang.com/?utm_source=geektimeweb&utm_medium=menu&gk_source=20241016_geektimeweb_menu","AI指南",{"icon":6,"link":479,"name":480},"https://www.infoq.cn/research","研究中心",[482,487,494,499,506,512,518,526,531,552,585,590,596],{"id":483,"pid":7,"name":484,"url":450,"icon":6,"corner_mark":485,"sort":14,"children":486},1038,{"type":14,"text":451,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":488,"pid":7,"name":489,"url":453,"icon":6,"corner_mark":490,"sort":491,"children":493},1039,{"type":14,"text":454,"icon":6,"alt":6},{"type":491,"text":492,"icon":6},2,"hot",[],{"id":495,"pid":7,"name":496,"url":456,"icon":6,"corner_mark":497,"sort":57,"children":498},1040,{"type":14,"text":457,"icon":6,"alt":6},{"type":491,"text":492,"icon":6},[],{"id":500,"pid":7,"name":501,"url":502,"icon":6,"corner_mark":503,"sort":504,"children":505},1041,{"type":14,"text":460,"icon":6,"alt":6},"https://agicamp.com/?utm_source=infoqbar",{"type":491,"text":492,"icon":6},4,[],{"id":507,"pid":7,"name":508,"url":470,"icon":6,"corner_mark":509,"sort":510,"children":511},1045,{"type":14,"text":471,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},5,[],{"id":513,"pid":7,"name":514,"url":465,"icon":6,"corner_mark":515,"sort":516,"children":517},1043,{"type":14,"text":466,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},6,[],{"id":519,"pid":7,"name":520,"url":189,"icon":6,"corner_mark":522,"sort":524,"children":525},1053,{"type":14,"text":521,"icon":6,"alt":6},"Snowflake",{"type":491,"text":523,"icon":6},"new",7,[],{"id":527,"pid":7,"name":528,"url":473,"icon":6,"corner_mark":529,"sort":34,"children":530},1046,{"type":14,"text":474,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":532,"pid":7,"name":533,"url":6,"icon":6,"corner_mark":535,"sort":536,"children":537},1056,{"type":14,"text":534,"icon":6,"alt":6},"企业专区",{"type":491,"text":523,"icon":6},9,[538,545],{"id":539,"pid":532,"name":540,"url":542,"icon":6,"corner_mark":543,"sort":14,"children":544},1062,{"type":14,"text":541,"icon":6,"alt":6},"arm专区","https://www.infoq.cn/zones/arm/",{"type":491,"text":523,"icon":6},[],{"id":546,"pid":532,"name":547,"url":549,"icon":6,"corner_mark":550,"sort":491,"children":551},1057,{"type":14,"text":548,"icon":6,"alt":6},"intel 专区","https://www.infoq.cn/zones/intel2025/",{"type":7,"text":6,"icon":6},[],{"id":553,"pid":7,"name":554,"url":251,"icon":6,"corner_mark":555,"sort":556,"children":557},1044,{"type":14,"text":468,"icon":6,"alt":6},{"type":491,"text":492,"icon":6},10,[558,564,571,578],{"id":559,"pid":553,"name":560,"url":251,"icon":6,"corner_mark":562,"sort":14,"children":563},1049,{"type":14,"text":561,"icon":6,"alt":6},"微众银行 · 深圳国际金融科技大赛",{"type":7,"text":6,"icon":6},[],{"id":565,"pid":553,"name":566,"url":568,"icon":6,"corner_mark":569,"sort":491,"children":570},1050,{"type":14,"text":567,"icon":6,"alt":6},"亚马逊云科技 · 1000 AIdea 应用计划","https://www.infoq.cn/zones/1000aidea/#schedule",{"type":7,"text":6,"icon":6},[],{"id":572,"pid":553,"name":573,"url":575,"icon":6,"corner_mark":576,"sort":57,"children":577},1051,{"type":14,"text":574,"icon":6,"alt":6},"微软 · AI 开发者挑战赛","https://www.infoq.cn/zones/microsoftai/",{"type":7,"text":6,"icon":6},[],{"id":579,"pid":553,"name":580,"url":582,"icon":6,"corner_mark":583,"sort":504,"children":584},1052,{"type":14,"text":581,"icon":6,"alt":6},"InfoQ · 大模型技术应用创新大赛","https://www.infoq.cn/zones/geekathon2023",{"type":7,"text":6,"icon":6},[],{"id":586,"pid":7,"name":587,"url":479,"icon":6,"corner_mark":588,"sort":45,"children":589},1048,{"type":14,"text":480,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},[],{"id":591,"pid":7,"name":592,"url":462,"icon":6,"corner_mark":593,"sort":594,"children":595},1042,{"type":14,"text":463,"icon":6,"alt":6},{"type":7,"text":6,"icon":6},12,[],{"id":597,"pid":7,"name":598,"url":476,"icon":6,"corner_mark":600,"sort":601,"children":602},1047,{"type":14,"text":599,"icon":6,"alt":6},"AI工具",{"type":7,"text":6,"icon":6},13,[603,611,619,627],{"id":604,"pid":597,"name":605,"url":607,"icon":6,"corner_mark":608,"sort":609,"children":610},1065,{"type":14,"text":606,"icon":6,"alt":6},"WorkBuddy","https://www.codebuddy.cn/work/?fromSource=gwzcw.11816099.11816099.11816099&utm_medium=cpc&utm_id=gwzcw.11816099.11816099.11816099",{"type":7,"text":6,"icon":6},1776761501,[],{"id":612,"pid":597,"name":613,"url":615,"icon":6,"corner_mark":616,"sort":617,"children":618},1066,{"type":14,"text":614,"icon":6,"alt":6},"QClaw-macOS(Apple芯片)版","https://cdn.qclaw.qq.com/qclaw/mac/arm64/0.1.13-5012-73/QClaw-0.1.13-5012-73-arm64.dmg",{"type":7,"text":6,"icon":6},1776761586,[],{"id":620,"pid":597,"name":621,"url":623,"icon":6,"corner_mark":624,"sort":625,"children":626},1067,{"type":14,"text":622,"icon":6,"alt":6},"QClaw-macOS(Intel芯片)版","https://cdn.qclaw.qq.com/qclaw/mac/x64/0.1.13-5012-73/QClaw-0.1.13-5012-73-x64.dmg",{"type":7,"text":6,"icon":6},1776761617,[],{"id":628,"pid":597,"name":629,"url":631,"icon":6,"corner_mark":632,"sort":633,"children":634},1068,{"type":14,"text":630,"icon":6,"alt":6},"QClaw-Windows版","https://cdn.qclaw.qq.com/qclaw/win/0.1.13-5012-146/QClaw-Setup-0.1.13-5012-146.exe",{"type":7,"text":6,"icon":6},1776761649,[],{"authorData":636,"id":644,"aid":645,"aidint":646,"type":14,"views":647,"uuid":648,"status":14,"publish_time":649,"ctime":650,"utime":650,"vid":6,"source":14,"sub_status":7,"ip_address":6,"score":649,"article_title":651,"article_sharetitle":651,"article_subtitle":6,"article_summary":652,"article_cover":653,"article_cover_point":654,"author":643,"translator":655,"planner":661,"topic":667,"is_collect":689,"no_author":6,"is_promotion":689,"share_pic":6,"sub_type":7,"comment_user":7,"comment_count":14,"speaker_title":6,"speaker_introduce":6,"video_status":7,"duration":6,"total_duration":6,"label":690,"out_id":11,"word_count":691,"front_type":14,"content_short":6,"is_fill_info":7,"show_subtitle":6,"content":692,"ebook":1693,"love":14,"is_love":689,"copyright":14,"lead_author":7,"ppt_url":6,"publisher":1694,"definition":11,"read_status":7,"collect":491,"checker":11,"outlines":11,"content_url":1695,"themes":1696,"audio_status":7,"audio_url":6,"audio_size":7,"ebook_type":7,"video":1697,"form_id":7,"topicIdsMustBeSelected":1698,"topicNamesMustBeSelected":1699,"themeIds":1700,"themeNames":1701},{"uid":637,"nickname":638,"avatar":6,"active":14,"is_early":7,"ucode":639,"uri":640,"author_type":7,"vip":7,"authorLabel":641,"isAuthor":642,"list":643},3009494,"Yong Cui","0CE5A563E9CE0A","/profile/0CE5A563E9CE0A/","作者",true,[636],160494,"161044",161044,20382,"MgtgoehSqE4Sa2dUqzAw",1653037599973,1653037602070,"PyScript:让 Python 脚本在 Web 中跑起来","累计收获 10k Stars,PyScript 具有光明的未来。","https://static001.infoq.cn/resource/image/b7/e1/b7de42e4b909b771ac1f04e383d4f8e1.png","{\"big\":{\"point\":{\"x\":5,\"y\":5,\"w\":1388,\"h\":781}},\"small\":{\"point\":{\"x\":281,\"y\":152,\"w\":854,\"h\":481}},\"width\":1400,\"height\":787}",[656],{"uid":657,"nickname":658,"avatar":6,"active":14,"is_early":7,"ucode":659,"uri":660,"author_type":7,"vip":7},1368875,"平川","4D6E74F678F49C","/profile/4D6E74F678F49C/",[662],{"uid":663,"nickname":664,"avatar":6,"active":14,"is_early":7,"ucode":665,"uri":666,"author_type":7,"vip":7},1439149,"邓艳琴","D459E9DD515679","/profile/D459E9DD515679/",[668,669,672,676,679,683,686],{"id":48,"name":49,"alias":6,"type":491},{"id":14,"name":670,"alias":671,"type":14},"语言 & 开发","development",{"id":673,"name":674,"alias":675,"type":14},32,"编程语言","programing-languages",{"id":677,"name":678,"alias":678,"type":14},1121,"GMTC",{"id":680,"name":681,"alias":682,"type":491},50,"Python","python",{"id":684,"name":685,"alias":6,"type":491},1151,"Web",{"id":687,"name":688,"alias":6,"type":491},1180,"框架",false,[],2422,{"type":693,"content":694},"doc",[695,705,716,737,744,759,766,774,783,840,847,867,869,880,882,888,898,905,913,1007,1014,1022,1024,1030,1032,1038,1048,1055,1063,1071,1102,1109,1117,1119,1125,1127,1133,1143,1150,1181,1188,1194,1237,1245,1276,1278,1284,1286,1292,1302,1309,1317,1408,1415,1441,1443,1449,1451,1457,1467,1474,1493,1501,1503,1511,1518,1538,1540,1546,1548,1554,1564,1571,1601,1609,1611,1619,1626,1634,1641,1649,1656,1664,1666,1677,1679],{"type":696,"content":697},"blockquote",[698],{"type":699,"attrs":700,"content":701},"paragraph",{"indent":7,"number":7,"align":11,"origin":11},[702],{"type":703,"text":704},"text","这是下一个大事件吗?如果继续发展下去,有可能。",{"type":699,"attrs":706,"content":707},{"indent":7,"number":7,"align":11,"origin":11},[708],{"type":703,"marks":709,"text":715},[710],{"type":711,"attrs":712},"color",{"color":713,"name":714},"#494949","user"," ",{"type":699,"attrs":717,"content":718},{"indent":7,"number":7,"align":11,"origin":11},[719,724,732],{"type":703,"marks":720,"text":723},[721],{"type":711,"attrs":722},{"color":713,"name":714},"在 2022年PyCon 美国大会期间,作为主题演讲嘉宾之一的 Peter Wang 公布了 ",{"type":725,"attrs":726,"content":729},"link",{"href":727,"title":728,"type":11},"https://github.com/pyscript/pyscript","xxx",[730],{"type":703,"text":731},"PyScript",{"type":703,"marks":733,"text":736},[734],{"type":711,"attrs":735},{"color":713,"name":714},",一种在 HTML 中直接编写 Python 脚本的方法。或许你不知道 Peter,但你可能听说过 Anaconda,这是一种流行的开源的 Python 和 R 语言的发行版本,特别关注数据科学。Peter 正是 Anaconda 的 CEO 和联合创始人。",{"type":699,"attrs":738,"content":739},{"indent":7,"number":7,"align":11,"origin":11},[740],{"type":703,"marks":741,"text":715},[742],{"type":711,"attrs":743},{"color":713,"name":714},{"type":699,"attrs":745,"content":746},{"indent":7,"number":7,"align":11,"origin":11},[747,752,754],{"type":703,"marks":748,"text":751},[749],{"type":711,"attrs":750},{"color":713,"name":714},"换言之,PyScript 是由一家著名的科技公司开发的,这可能会保证它在不久的将来成为可行的方案。它在 Python 和 Web 开发者中受到了极大的关注,",{"type":703,"text":753},"GitHub",{"type":703,"marks":755,"text":758},[756],{"type":711,"attrs":757},{"color":713,"name":714}," 上已有超过 10k 颗 Stars。然而,它是否能成为一个成功的、有竞争力的产品,取决于长期的时间和开发投入。目前,它还有一些已知的缺陷(将在最后讨论)。",{"type":699,"attrs":760,"content":761},{"indent":7,"number":7,"align":11,"origin":11},[762],{"type":703,"marks":763,"text":715},[764],{"type":711,"attrs":765},{"color":713,"name":714},{"type":699,"attrs":767,"content":768},{"indent":7,"number":7,"align":11,"origin":11},[769],{"type":703,"marks":770,"text":773},[771],{"type":711,"attrs":772},{"color":713,"name":714},"闲话少说,让我们快速了解一下这个令人振奋的产品吧!",{"type":775,"attrs":776,"content":777},"heading",{"align":11,"level":14},[778],{"type":703,"marks":779,"text":782},[780],{"type":711,"attrs":781},{"color":713,"name":714},"py-script标签",{"type":699,"attrs":784,"content":785},{"indent":7,"number":7,"align":11,"origin":11},[786,791,799,804,811,816,823,828,835],{"type":703,"marks":787,"text":790},[788],{"type":711,"attrs":789},{"color":713,"name":714},"我们知道,HTML 文件是大多数网站最常见的元素。在创建网站时,我们的工作就是直接或间接地通过一些框架来编制 HTML 文件。在典型的 HTML 文件中,你会看到各种类型的标签。例如,",{"type":792,"content":793,"marks":796},"codeinline",[794],{"type":703,"text":795},"\u003Chead>",[797],{"type":711,"attrs":798},{"color":713,"name":714},{"type":703,"marks":800,"text":803},[801],{"type":711,"attrs":802},{"color":713,"name":714},"定义了HTML页面的元数据和关键信息,",{"type":792,"content":805,"marks":808},[806],{"type":703,"text":807},"\u003Ctitle>",[809],{"type":711,"attrs":810},{"color":713,"name":714},{"type":703,"marks":812,"text":815},[813],{"type":711,"attrs":814},{"color":713,"name":714},"是整个文档的标题,而",{"type":792,"content":817,"marks":820},[818],{"type":703,"text":819},"\u003Ch1>",[821],{"type":711,"attrs":822},{"color":713,"name":714},{"type":703,"marks":824,"text":827},[825],{"type":711,"attrs":826},{"color":713,"name":714},"、",{"type":792,"content":829,"marks":832},[830],{"type":703,"text":831},"\u003Ch2>",[833],{"type":711,"attrs":834},{"color":713,"name":714},{"type":703,"marks":836,"text":839},[837],{"type":711,"attrs":838},{"color":713,"name":714},"等定义了不同级别的内容标题。",{"type":699,"attrs":841,"content":842},{"indent":7,"number":7,"align":11,"origin":11},[843],{"type":703,"marks":844,"text":715},[845],{"type":711,"attrs":846},{"color":713,"name":714},{"type":699,"attrs":848,"content":849},{"indent":7,"number":7,"align":11,"origin":11},[850,855,862],{"type":703,"marks":851,"text":854},[852],{"type":711,"attrs":853},{"color":713,"name":714},"如前所述,PyScript 允许你在 HTML 中编写Python脚本,它使用一个特殊的标签",{"type":792,"content":856,"marks":859},[857],{"type":703,"text":858},"py-script",[860],{"type":711,"attrs":861},{"color":713,"name":714},{"type":703,"marks":863,"text":866},[864],{"type":711,"attrs":865},{"color":713,"name":714},"。在这个标签中,你可以嵌入 Python 脚本。要了解它是如何工作的,可以创建一个 HTML 文件,其中包含以下代码,并使用 Chrome 浏览器打开该文件。在 Chrome 浏览器中,你应该能够看到类似下面这样的内容:",{"type":699,"attrs":868},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":871},"image",{"src":872,"alt":11,"title":11,"style":873,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/b7/b7cf3649eb920dfd76b246074c54a8f0.png",[874,877],{"key":875,"value":876},"width","75%",{"key":878,"value":879},"bordertype","none",{"type":699,"attrs":881},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":883},{"src":884,"alt":11,"title":11,"style":885,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/d1/d1c8a6e49c89d1695ab45b26f726d77e.png",[886,887],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":889,"content":891},{"indent":7,"number":7,"align":890,"origin":11},"center",[892],{"type":703,"marks":893,"text":897},[894],{"type":895,"attrs":896},"size",{"size":536},"作者截图",{"type":699,"attrs":899,"content":900},{"indent":7,"number":7,"align":11,"origin":11},[901],{"type":703,"marks":902,"text":715},[903],{"type":711,"attrs":904},{"color":713,"name":714},{"type":699,"attrs":906,"content":907},{"indent":7,"number":7,"align":11,"origin":11},[908],{"type":703,"marks":909,"text":912},[910],{"type":711,"attrs":911},{"color":713,"name":714},"在上面的代码片段中,你可能已经注意到以下三个关键点:",{"type":914,"content":915},"bulletedlist",[916,941,979],{"type":917,"attrs":918,"content":919},"listitem",{"listStyle":11},[920],{"type":699,"attrs":921,"content":922},{"indent":7,"number":7,"align":11,"origin":11},[923,930,932,939],{"type":792,"content":924,"marks":926},[925],{"type":703,"text":725},[927],{"type":711,"attrs":928},{"color":929,"name":714},"#292929",{"type":703,"text":931},"标签定义了一个外部样式表。在这个例子中,我们使用了 PyScript 提供的",{"type":792,"content":933,"marks":936},[934],{"type":703,"text":935},"css",[937],{"type":711,"attrs":938},{"color":929,"name":714},{"type":703,"text":940},"文件。",{"type":917,"attrs":942,"content":943},{"listStyle":11},[944],{"type":699,"attrs":945,"content":946},{"indent":7,"number":7,"align":11,"origin":11},[947,952,959,961,968,970,977],{"type":703,"marks":948,"text":951},[949],{"type":711,"attrs":950},{"color":713,"name":714},"我们使用",{"type":792,"content":953,"marks":956},[954],{"type":703,"text":955},"script",[957],{"type":711,"attrs":958},{"color":929,"name":714},{"type":703,"text":960},"标签来嵌入一个由",{"type":792,"content":962,"marks":965},[963],{"type":703,"text":964},"src",[966],{"type":711,"attrs":967},{"color":929,"name":714},{"type":703,"text":969},"定义、由 PyScript 托管的外部脚本。我们使用了",{"type":792,"content":971,"marks":974},[972],{"type":703,"text":973},"defer",[975],{"type":711,"attrs":976},{"color":929,"name":714},{"type":703,"text":978},",这样脚本会在下载和页面解析完成后执行——本质上是一种延迟执行,而不是实时执行。",{"type":917,"attrs":980,"content":981},{"listStyle":11},[982],{"type":699,"attrs":983,"content":984},{"indent":7,"number":7,"align":11,"origin":11},[985,990,996,998,1005],{"type":703,"marks":986,"text":989},[987],{"type":711,"attrs":988},{"color":713,"name":714},"最有趣的部分是",{"type":792,"content":991,"marks":993},[992],{"type":703,"text":858},[994],{"type":711,"attrs":995},{"color":929,"name":714},{"type":703,"text":997},"标签。如你所见,",{"type":792,"content":999,"marks":1002},[1000],{"type":703,"text":1001},"print(\"Hello, World!\")",[1003],{"type":711,"attrs":1004},{"color":929,"name":714},{"type":703,"text":1006},"是 Python 代码。当执行 HTML 文件时,就可以看到代码求值结果。",{"type":699,"attrs":1008,"content":1009},{"indent":7,"number":7,"align":11,"origin":11},[1010],{"type":703,"marks":1011,"text":715},[1012],{"type":711,"attrs":1013},{"color":713,"name":714},{"type":699,"attrs":1015,"content":1016},{"indent":7,"number":7,"align":11,"origin":11},[1017],{"type":703,"marks":1018,"text":1021},[1019],{"type":711,"attrs":1020},{"color":713,"name":714},"这很酷,不是吗?如果你不熟悉 Web 开发,但了解 Python,就可以使用 PyScript 嵌入任何有效的 Python 代码。让我们再看一个例子。",{"type":699,"attrs":1023},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1025},{"src":1026,"alt":11,"title":11,"style":1027,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/80/80c04d7afe33fd0f4d34f391847a8e75.png",[1028,1029],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1031},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1033},{"src":1034,"alt":11,"title":11,"style":1035,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/ff/ff83f9e4bfead1f156366ce957063170.png",[1036,1037],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1039,"content":1040},{"indent":7,"number":7,"align":890,"origin":11},[1041],{"type":703,"marks":1042,"text":1047},[1043,1045],{"type":895,"attrs":1044},{"size":536},{"type":711,"attrs":1046},{"color":713,"name":714},"另一个PyScript示例(图片由作者提供)",{"type":699,"attrs":1049,"content":1050},{"indent":7,"number":7,"align":11,"origin":11},[1051],{"type":703,"marks":1052,"text":715},[1053],{"type":711,"attrs":1054},{"color":713,"name":714},{"type":699,"attrs":1056,"content":1057},{"indent":7,"number":7,"align":11,"origin":11},[1058],{"type":703,"marks":1059,"text":1062},[1060],{"type":711,"attrs":1061},{"color":713,"name":714},"在这里,我们写了一些需要计算的代码,可以看到,脚本得到了正确的执行。",{"type":775,"attrs":1064,"content":1065},{"align":11,"level":14},[1066],{"type":703,"marks":1067,"text":1070},[1068],{"type":711,"attrs":1069},{"color":713,"name":714},"py-env标签",{"type":699,"attrs":1072,"content":1073},{"indent":7,"number":7,"align":11,"origin":11},[1074,1079,1086,1091,1097],{"type":703,"marks":1075,"text":1078},[1076],{"type":711,"attrs":1077},{"color":713,"name":714},"在编写更复杂的代码时,就需要使用第三方库。在这种情况下,我们可以利用",{"type":792,"content":1080,"marks":1083},[1081],{"type":703,"text":1082},"py-env",[1084],{"type":711,"attrs":1085},{"color":713,"name":714},{"type":703,"marks":1087,"text":1090},[1088],{"type":711,"attrs":1089},{"color":713,"name":714},"标签。你可能已经猜到的,env 是 environment 的缩写。",{"type":792,"content":1092,"marks":1094},[1093],{"type":703,"text":1082},[1095],{"type":711,"attrs":1096},{"color":713,"name":714},{"type":703,"marks":1098,"text":1101},[1099],{"type":711,"attrs":1100},{"color":713,"name":714},"标签中列出了运行代码所需的 Python 包。",{"type":699,"attrs":1103,"content":1104},{"indent":7,"number":7,"align":11,"origin":11},[1105],{"type":703,"marks":1106,"text":715},[1107],{"type":711,"attrs":1108},{"color":713,"name":714},{"type":699,"attrs":1110,"content":1111},{"indent":7,"number":7,"align":11,"origin":11},[1112],{"type":703,"marks":1113,"text":1116},[1114],{"type":711,"attrs":1115},{"color":713,"name":714},"你可能知道,许多数据科学家都使用 pandas 进行数据处理工作。让我们看看下面的例子。",{"type":699,"attrs":1118},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1120},{"src":1121,"alt":11,"title":11,"style":1122,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/81/81a2e07ff71a317924c7664120862b6e.png",[1123,1124],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1126},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1128},{"src":1129,"alt":11,"title":11,"style":1130,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/df/df79380011e061d1030cfe721b89989b.png",[1131,1132],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1134,"content":1135},{"indent":7,"number":7,"align":890,"origin":11},[1136],{"type":703,"marks":1137,"text":1142},[1138,1140],{"type":895,"attrs":1139},{"size":536},{"type":711,"attrs":1141},{"color":713,"name":714},"使用包的PyScript(图片由作者提供)",{"type":699,"attrs":1144,"content":1145},{"indent":7,"number":7,"align":11,"origin":11},[1146],{"type":703,"marks":1147,"text":715},[1148],{"type":711,"attrs":1149},{"color":713,"name":714},{"type":699,"attrs":1151,"content":1152},{"indent":7,"number":7,"align":11,"origin":11},[1153,1158,1164,1169,1176],{"type":703,"marks":1154,"text":1157},[1155],{"type":711,"attrs":1156},{"color":713,"name":714},"如你所见,我们在",{"type":792,"content":1159,"marks":1161},[1160],{"type":703,"text":1082},[1162],{"type":711,"attrs":1163},{"color":713,"name":714},{"type":703,"marks":1165,"text":1168},[1166],{"type":711,"attrs":1167},{"color":713,"name":714},"标签中指定了依赖项(即 Pandas),该标签包含在",{"type":792,"content":1170,"marks":1173},[1171],{"type":703,"text":1172},"head",[1174],{"type":711,"attrs":1175},{"color":713,"name":714},{"type":703,"marks":1177,"text":1180},[1178],{"type":711,"attrs":1179},{"color":713,"name":714},"标签中。如果页面需要多个依赖项,可以在这里把它们全部列出:",{"type":699,"attrs":1182,"content":1183},{"indent":7,"number":7,"align":11,"origin":11},[1184],{"type":703,"marks":1185,"text":715},[1186],{"type":711,"attrs":1187},{"color":713,"name":714},{"type":1189,"attrs":1190,"content":1191},"codeblock",{"lang":11},[1192],{"type":703,"text":1193},"\u003Cpy-env>\n - pandas\n - matplotlib\n - numpy\n\u003C/py-env>",{"type":699,"attrs":1195,"content":1196},{"indent":7,"number":7,"align":11,"origin":11},[1197,1202,1208,1213,1220,1225,1232],{"type":703,"marks":1198,"text":1201},[1199],{"type":711,"attrs":1200},{"color":713,"name":714},"如你所见,在",{"type":792,"content":1203,"marks":1205},[1204],{"type":703,"text":858},[1206],{"type":711,"attrs":1207},{"color":713,"name":714},{"type":703,"marks":1209,"text":1212},[1210],{"type":711,"attrs":1211},{"color":713,"name":714},"标签中,我们确实可以使用 Pandas 库来创建一个",{"type":792,"content":1214,"marks":1217},[1215],{"type":703,"text":1216},"DataFrame",[1218],{"type":711,"attrs":1219},{"color":713,"name":714},{"type":703,"marks":1221,"text":1224},[1222],{"type":711,"attrs":1223},{"color":713,"name":714},"对象。然而,当我们把打印出来时就会发现,它是一个单行,而不是一个结构化的数据表。没有一个适当的结构,我们就无法理解这些数据。幸运的是,我们可以使用",{"type":792,"content":1226,"marks":1229},[1227],{"type":703,"text":1228},"write",[1230],{"type":711,"attrs":1231},{"color":713,"name":714},{"type":703,"marks":1233,"text":1236},[1234],{"type":711,"attrs":1235},{"color":713,"name":714},"函数(下文会讨论)。",{"type":775,"attrs":1238,"content":1239},{"align":11,"level":14},[1240],{"type":703,"marks":1241,"text":1244},[1242],{"type":711,"attrs":1243},{"color":713,"name":714},"将内容写入指定标签",{"type":699,"attrs":1246,"content":1247},{"indent":7,"number":7,"align":11,"origin":11},[1248,1253,1260,1265,1271],{"type":703,"marks":1249,"text":1252},[1250],{"type":711,"attrs":1251},{"color":713,"name":714},"除了Python中的标准打印函数",{"type":792,"content":1254,"marks":1257},[1255],{"type":703,"text":1256},"print",[1258],{"type":711,"attrs":1259},{"color":713,"name":714},{"type":703,"marks":1261,"text":1264},[1262],{"type":711,"attrs":1263},{"color":713,"name":714},",作为脚本的一部分,PyScript有自己的",{"type":792,"content":1266,"marks":1268},[1267],{"type":703,"text":1228},[1269],{"type":711,"attrs":1270},{"color":713,"name":714},{"type":703,"marks":1272,"text":1275},[1273],{"type":711,"attrs":1274},{"color":713,"name":714},"函数,可以将数据发送到页面上指定的Web元素中。请看下面的例子:",{"type":699,"attrs":1277},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1279},{"src":1280,"alt":11,"title":11,"style":1281,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/54/548175e28244c2b86e5b35db19bdf9ff.png",[1282,1283],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1285},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1287},{"src":1288,"alt":11,"title":11,"style":1289,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/f6/f612d73015a7a21224b20561347bf3b2.png",[1290,1291],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1293,"content":1294},{"indent":7,"number":7,"align":890,"origin":11},[1295],{"type":703,"marks":1296,"text":1301},[1297,1299],{"type":895,"attrs":1298},{"size":536},{"type":711,"attrs":1300},{"color":713,"name":714},"PyScript 写函数 write(图片由作者提供)",{"type":699,"attrs":1303,"content":1304},{"indent":7,"number":7,"align":11,"origin":11},[1305],{"type":703,"marks":1306,"text":715},[1307],{"type":711,"attrs":1308},{"color":713,"name":714},{"type":699,"attrs":1310,"content":1311},{"indent":7,"number":7,"align":11,"origin":11},[1312],{"type":703,"marks":1313,"text":1316},[1314],{"type":711,"attrs":1315},{"color":713,"name":714},"与之前的例子相比,上述代码片段有两个重大变化:",{"type":914,"content":1318},[1319,1348],{"type":917,"attrs":1320,"content":1321},{"listStyle":11},[1322],{"type":699,"attrs":1323,"content":1324},{"indent":7,"number":7,"align":11,"origin":11},[1325,1330,1337,1339,1346],{"type":703,"marks":1326,"text":1329},[1327],{"type":711,"attrs":1328},{"color":713,"name":714},"我们现在定义了一个 id 为",{"type":792,"content":1331,"marks":1334},[1332],{"type":703,"text":1333},"\"DataFrame\"",[1335],{"type":711,"attrs":1336},{"color":929,"name":714},{"type":703,"text":1338},"的",{"type":792,"content":1340,"marks":1343},[1341],{"type":703,"text":1342},"div",[1344],{"type":711,"attrs":1345},{"color":929,"name":714},{"type":703,"text":1347},",这样稍后就可以引用。",{"type":917,"attrs":1349,"content":1350},{"listStyle":11},[1351],{"type":699,"attrs":1352,"content":1353},{"indent":7,"number":7,"align":11,"origin":11},[1354,1359,1365,1367,1373,1375,1381,1383,1390,1392,1398,1400,1406],{"type":703,"marks":1355,"text":1358},[1356],{"type":711,"attrs":1357},{"color":713,"name":714},"在",{"type":792,"content":1360,"marks":1362},[1361],{"type":703,"text":858},[1363],{"type":711,"attrs":1364},{"color":929,"name":714},{"type":703,"text":1366},"标签中,我们创建一个与之前相同的",{"type":792,"content":1368,"marks":1370},[1369],{"type":703,"text":1216},[1371],{"type":711,"attrs":1372},{"color":929,"name":714},{"type":703,"text":1374},"对象。但现在,我们不是调用",{"type":792,"content":1376,"marks":1378},[1377],{"type":703,"text":1256},[1379],{"type":711,"attrs":1380},{"color":929,"name":714},{"type":703,"text":1382},",而是调用",{"type":792,"content":1384,"marks":1387},[1385],{"type":703,"text":1386},"pyscript.write",[1388],{"type":711,"attrs":1389},{"color":929,"name":714},{"type":703,"text":1391},"函数,请求 PyScript 处理并在",{"type":792,"content":1393,"marks":1395},[1394],{"type":703,"text":1333},[1396],{"type":711,"attrs":1397},{"color":929,"name":714},{"type":703,"text":1399},"中显示",{"type":792,"content":1401,"marks":1403},[1402],{"type":703,"text":1216},[1404],{"type":711,"attrs":1405},{"color":929,"name":714},{"type":703,"text":1407},"对象。从输出可以看到,我们现在有一个结构化的表格了。",{"type":699,"attrs":1409,"content":1410},{"indent":7,"number":7,"align":11,"origin":11},[1411],{"type":703,"marks":1412,"text":715},[1413],{"type":711,"attrs":1414},{"color":713,"name":714},{"type":699,"attrs":1416,"content":1417},{"indent":7,"number":7,"align":11,"origin":11},[1418,1424,1429,1436],{"type":792,"content":1419,"marks":1421},[1420],{"type":703,"text":1228},[1422],{"type":711,"attrs":1423},{"color":713,"name":714},{"type":703,"marks":1425,"text":1428},[1426],{"type":711,"attrs":1427},{"color":713,"name":714},"函数不仅能够打印表格,还能够打印数字。下面的例子向你展示了我们如何使用",{"type":792,"content":1430,"marks":1433},[1431],{"type":703,"text":1432},"matplotlib",[1434],{"type":711,"attrs":1435},{"color":713,"name":714},{"type":703,"marks":1437,"text":1440},[1438],{"type":711,"attrs":1439},{"color":713,"name":714},"(一个流行的Python包,用于数据可视化)来显示由 Python 创建的图。",{"type":699,"attrs":1442},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1444},{"src":1445,"alt":11,"title":11,"style":1446,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/67/67aa8e871dffbace046e760e4249ec4d.png",[1447,1448],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1450},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1452},{"src":1453,"alt":11,"title":11,"style":1454,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/9c/9c5c42ab5a569023ab63df58dfbedcab.png",[1455,1456],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1458,"content":1459},{"indent":7,"number":7,"align":890,"origin":11},[1460],{"type":703,"marks":1461,"text":1466},[1462,1464],{"type":895,"attrs":1463},{"size":536},{"type":711,"attrs":1465},{"color":713,"name":714},"PyScript打印图(图片由作者提供)",{"type":699,"attrs":1468,"content":1469},{"indent":7,"number":7,"align":11,"origin":11},[1470],{"type":703,"marks":1471,"text":715},[1472],{"type":711,"attrs":1473},{"color":713,"name":714},{"type":699,"attrs":1475,"content":1476},{"indent":7,"number":7,"align":11,"origin":11},[1477,1482,1488],{"type":703,"marks":1478,"text":1481},[1479],{"type":711,"attrs":1480},{"color":713,"name":714},"如你所见,",{"type":792,"content":1483,"marks":1485},[1484],{"type":703,"text":1228},[1486],{"type":711,"attrs":1487},{"color":713,"name":714},{"type":703,"marks":1489,"text":1492},[1490],{"type":711,"attrs":1491},{"color":713,"name":714}," 函数以期望的方式显示了图。",{"type":775,"attrs":1494,"content":1495},{"align":11,"level":14},[1496],{"type":703,"marks":1497,"text":1500},[1498],{"type":711,"attrs":1499},{"color":713,"name":714},"py-repl标签",{"type":699,"attrs":1502},{"indent":7,"number":7,"align":11,"origin":11},{"type":699,"attrs":1504,"content":1505},{"indent":7,"number":7,"align":11,"origin":11},[1506],{"type":703,"marks":1507,"text":1510},[1508],{"type":711,"attrs":1509},{"color":713,"name":714},"Python 学习的最好方法之一是使用 REPL:读取(Read)、求值(Evaluate)、打印(Print)和循环(Loop)。也就是说,使用一个交互式的 Python 控制台,输入一些代码,Python 对其进行求值并打印适当的输出,然后重复这个过程。Web 页面也可以提供这样的 REPL 环境,比如 Jupyter Notebook。",{"type":699,"attrs":1512,"content":1513},{"indent":7,"number":7,"align":11,"origin":11},[1514],{"type":703,"marks":1515,"text":715},[1516],{"type":711,"attrs":1517},{"color":713,"name":714},{"type":699,"attrs":1519,"content":1520},{"indent":7,"number":7,"align":11,"origin":11},[1521,1526,1533],{"type":703,"marks":1522,"text":1525},[1523],{"type":711,"attrs":1524},{"color":713,"name":714},"PyScript 可以使用",{"type":792,"content":1527,"marks":1530},[1528],{"type":703,"text":1529},"py-repl",[1531],{"type":711,"attrs":1532},{"color":713,"name":714},{"type":703,"marks":1534,"text":1537},[1535],{"type":711,"attrs":1536},{"color":713,"name":714},"标签提供与此类似的东西。在这个元素中,你可以让用户自己编写代码,也可以以编程方式输入代码。请看下面的例子:",{"type":699,"attrs":1539},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1541},{"src":1542,"alt":11,"title":11,"style":1543,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/b6/b66645cc4bc41c399659afaff9f3d7ee.png",[1544,1545],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1547},{"indent":7,"number":7,"align":11,"origin":11},{"type":870,"attrs":1549},{"src":1550,"alt":11,"title":11,"style":1551,"href":11,"fromPaste":642,"pastePass":642},"https://static001.geekbang.org/infoq/a7/a716f3728f2d077ead11eab508d64477.png",[1552,1553],{"key":875,"value":876},{"key":878,"value":879},{"type":699,"attrs":1555,"content":1556},{"indent":7,"number":7,"align":890,"origin":11},[1557],{"type":703,"marks":1558,"text":1563},[1559,1561],{"type":895,"attrs":1560},{"size":536},{"type":711,"attrs":1562},{"color":713,"name":714},"PyScript REPL(图片由作者提供)",{"type":699,"attrs":1565,"content":1566},{"indent":7,"number":7,"align":11,"origin":11},[1567],{"type":703,"marks":1568,"text":715},[1569],{"type":711,"attrs":1570},{"color":713,"name":714},{"type":699,"attrs":1572,"content":1573},{"indent":7,"number":7,"align":11,"origin":11},[1574,1579,1585,1590,1596],{"type":703,"marks":1575,"text":1578},[1576],{"type":711,"attrs":1577},{"color":713,"name":714},"如你所见,上图中有一个单元格,其中包括在",{"type":792,"content":1580,"marks":1582},[1581],{"type":703,"text":1529},[1583],{"type":711,"attrs":1584},{"color":713,"name":714},{"type":703,"marks":1586,"text":1589},[1587],{"type":711,"attrs":1588},{"color":713,"name":714},"标签中指定的代码。值得注意的是,单元格中的代码可以引用我们之前在",{"type":792,"content":1591,"marks":1593},[1592],{"type":703,"text":858},[1594],{"type":711,"attrs":1595},{"color":713,"name":714},{"type":703,"marks":1597,"text":1600},[1598],{"type":711,"attrs":1599},{"color":713,"name":714},"标签中定义的变量。一切看起来都很协调。",{"type":775,"attrs":1602,"content":1603},{"align":11,"level":14},[1604],{"type":703,"marks":1605,"text":1608},[1606],{"type":711,"attrs":1607},{"color":713,"name":714},"感想",{"type":699,"attrs":1610},{"indent":7,"number":7,"align":11,"origin":11},{"type":699,"attrs":1612,"content":1613},{"indent":7,"number":7,"align":11,"origin":11},[1614],{"type":703,"marks":1615,"text":1618},[1616],{"type":711,"attrs":1617},{"color":713,"name":714},"本文介绍的内容是现阶段 PyScript 所能提供的主要亮点。它似乎是一个很有前途的产品,因为它提供了一个灵活的框架,让 Python 程序员可以在没有太多 Web 开发知识的情况下创建 Web 应用。然而,也有其他类似的成功的产品,因此,竞争会很激烈。",{"type":699,"attrs":1620,"content":1621},{"indent":7,"number":7,"align":11,"origin":11},[1622],{"type":703,"marks":1623,"text":715},[1624],{"type":711,"attrs":1625},{"color":713,"name":714},{"type":699,"attrs":1627,"content":1628},{"indent":7,"number":7,"align":11,"origin":11},[1629],{"type":703,"marks":1630,"text":1633},[1631],{"type":711,"attrs":1632},{"color":713,"name":714},"例如,如果我需要为自己的数据科学项目创建一个 Web 应用,我就会直接使用 Streamlit。它的功能已经相对成熟。请注意,虽然都与 Web 开发有关,但 PyScript 和 Streamlit 属于不同的产品系。PyScript 应该更通用,因为它的目标是让你可以在任何网页上嵌入任何 Python 代码,Streamlit 做不到这一点。",{"type":699,"attrs":1635,"content":1636},{"indent":7,"number":7,"align":11,"origin":11},[1637],{"type":703,"marks":1638,"text":715},[1639],{"type":711,"attrs":1640},{"color":713,"name":714},{"type":699,"attrs":1642,"content":1643},{"indent":7,"number":7,"align":11,"origin":11},[1644],{"type":703,"marks":1645,"text":1648},[1646],{"type":711,"attrs":1647},{"color":713,"name":714},"在 PyScript 为更多的人所接受之前,它有几个问题必须解决。例如,Web 页面的加载速度非常慢。如果你尝试跟随本教程运行代码,可能就会注意到,在 Web 页面的显示会有一个明显的滞后。",{"type":699,"attrs":1650,"content":1651},{"indent":7,"number":7,"align":11,"origin":11},[1652],{"type":703,"marks":1653,"text":715},[1654],{"type":711,"attrs":1655},{"color":713,"name":714},{"type":699,"attrs":1657,"content":1658},{"indent":7,"number":7,"align":11,"origin":11},[1659],{"type":703,"marks":1660,"text":1663},[1661],{"type":711,"attrs":1662},{"color":713,"name":714},"尽管如此,我还是觉得这个产品会继续发展,我的信心主要来自于它的开发者——给我们带来极好的 Anaconda 工具的 Anaconda 团队。",{"type":699,"attrs":1665},{"indent":7,"number":7,"align":11,"origin":11},{"type":699,"attrs":1667,"content":1668},{"indent":7,"number":7,"align":11,"origin":11},[1669],{"type":703,"marks":1670,"text":1676},[1671,1673],{"type":1672},"italic",{"type":711,"attrs":1674},{"color":1675,"name":714},"#333333","本文最初发布于Better Programming。",{"type":699,"attrs":1678},{"indent":7,"number":7,"align":11,"origin":11},{"type":699,"attrs":1680,"content":1681},{"indent":7,"number":7,"align":11,"origin":11},[1682,1687],{"type":703,"marks":1683,"text":1686},[1684],{"type":711,"attrs":1685},{"color":713,"name":714},"查看英文原文:",{"type":725,"attrs":1688,"content":1690},{"href":1689,"title":728,"type":11},"https://betterprogramming.pub/running-python-script-on-the-web-using-pyscript-the-next-big-thing-8ace9543d75",[1691],{"type":703,"text":1692},"Running Python Scripts on the Web Using PyScript",{},{"uid":7,"nickname":6,"avatar":6,"active":7,"is_early":7,"ucode":6,"uri":6,"author_type":7,"vip":7,"mood":6,"intro":6,"is_sub":689},"https://static-acl-001.geekbang.org/resource/article/95a26bcb608b3462ef1fdcaa10c962f7/content.json?auth_key=1779093739-c63505215ed443a995640861b4d2b95e-0-c7945b04bc948a2aece34549b783dd75&v_t=1653037602070",[],{"ai_subtitle":6,"ai_subtitle_vtt":6,"subtitle_url":6,"show_subtitle":7,"manuscripts":11},[14,673,677],[670,674,678],[],[],["Reactive",1703],{"$sisMobile":689},["Set"],["ShallowReactive",1706],{"navConfig":-1,"headerMenuList":-1,"articleDetail":-1},"/article/MgtgoehSqE4Sa2dUqzAw",{"loginUser":1709,"main":1713},{"loginUser":1710,"userInfo":1712},["EmptyRef",1711],"null",["EmptyRef",1711],{"isMobile":1714,"isBottom":1716,"nowTime":1717,"isImmersion":1719,"messageCount":1720,"pageAction":1722,"showHeaderNotice":1723,"showHeaderFriendship":1724,"noticeLinePopup":1725,"isArticlePage":1726},["EmptyRef",1715],"false",["EmptyRef",1715],["Ref",1718],1779095509628,["EmptyRef",1715],["EmptyRef",1721],"0",["EmptyRef",1711],["EmptyRef",1715],["EmptyRef",1715],["EmptyRef",1715],["EmptyRef",1715]]</script><script>window.__NUXT__={};window.__NUXT__.config={public:{siteUrl:"https://www.infoq.cn","nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"}},device:{defaultUserAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.39 Safari/537.36",enabled:true,refreshOnResize:false}},app:{baseURL:"/",buildId:"74000e92-69cd-4e04-bee7-d4166330e33d",buildAssetsDir:"static/web/nuxt/www.infoq.cn",cdnURL:"https://static001.geekbang.org"}}</script></body></html>