使用 Python 和 BeeWare 进行跨平台开发

了解 BeeWare 库和桥接套件如何帮助 Python 开发人员跨平台部署代码。
435 位读者喜欢这个。
Avoiding data disasters with Sanoid

Opensource.com

如果您想为 Android 开发,您必须使用 Java。如果您想为 iOS 开发,您必须使用 Objective-C。如果您想为 Web 开发,您必须使用 JavaScript。对吗?

这些可能是这些平台的首选语言,但归根结底,手机和 Web 浏览器都是计算平台,稍加努力,您可以使用任何您想要的语言。借助 BeeWare 库和桥接套件,您只需使用 Python。而且,您可以使用相同的代码部署到所有这些平台。

本文预览了我们即将到来的 PyCon US 2017 演讲 Snek in the Browser,该演讲深入探讨了 BeeWare 项目如何使用 Python 通过 BataviaToga 进行前端开发。

为什么选择 Python?

因为我们不必使用 HTML 和 JavaScript,我们可以开始将浏览器视为一个平台,我们可以在其上交付应用程序,而不是一套特定的技术,您必须编写代码来适应。一旦我们采用了这种心态,它就解放了我们,去寻找构建 Web 应用程序的各种新方法。

Python 是最容易学习的语言之一,它没有 Java 或 Objective-C 的学习曲线。最近,包括天文学和数据科学在内的许多科学界都选择了 Python 作为他们的首选语言。能够使用他们已经知道的语言来创建自己的应用程序,例如基于移动的数据记录系统,而无需学习全新的语言,对于所有这些科学家来说将是一笔巨大的财富。

它是如何工作的?

唯一在浏览器中原生工作的语言是 JavaScript。当然,Flash、Silverlight 等有一些变通方法,但它们都容易出现安全和开发问题。然而,Batavia 使用 JavaScript 来运行 Python。如何做到的?通过在 JavaScript 中实现 Python 虚拟机。Python 本身只是一种语言规范。另一方面,CPython 是大多数人使用的 Python 实现,PyPy 是另一种。CPython 一旦编译,就会生成您可能在文件系统中看到的 .pyc 文件。这些是大约 100 种不同基本操作的字节码表示。实现一种让 JavaScript 理解这些操作如何工作的方法,您就拥有了一个解释器。

鉴于此,如果我们创建一个基于 JavaScript 的应用程序,它可以接受 Python 字节码并返回与 CPython 实现相同的结果,我们就可以在浏览器中运行 Python。事实上,您可以用少于 500 行代码完成这项工作,正如 Allison Kaptur 在她的文章“500 行或更少,用 Python 编写的 Python 解释器”中所解释的那样。

诸如 ASM.js 和 WebAssembly 等新兴技术使浏览器内语言解释器的前景更加光明,因为这些项目提供了性能改进。

原生渲染

为了能够使用与移动部署相同的代码来渲染网站,我们需要一个通用的包装器,使我们能够面向这些平台。这就是 Toga(一个操作系统原生图形用户界面 (GUI) 工具包)的用武之地。Toga 抽象出了不同系统的界面选项。如果您想创建一个退出按钮,它在 macOS 上的位置与在 Windows 或 Linux 上的位置不同。它不仅仅是本机系统调用的包装器,它是对本机层的抽象,捕获了高级用户交互用例。

归根结底,网页和移动屏幕只是位图设备,在屏幕上渲染字体、形状和线条。HTML 引入了一种关于图形用户界面构建块的新思维方式,但通过整合我们如何考虑将内容放在屏幕上的方式,将此抽象到所有平台变得更加简单。

正在进行中,但您可以提供帮助!

整个 BeeWare 套件,包括 Batavia 和 Toga,仍在开发中。我们公开招募导师,欢迎任何想参与该项目的人。如果您为该项目做出贡献,无论是代码、文档、编写教程还是帮助他人贡献,您都将获得一枚闪亮的 挑战币

我们将参加 PyCon US 2017 的整个活动,从第一个教程日(我们的教程不幸已售罄)到冲刺阶段。在主会议期间,我们将在展厅 103 号展位,欢迎前来打招呼,看看我们的硬币和代码有多闪亮。

User profile image.
多年来,Katie 担任过许多不同的角色。她曾担任多种语言的软件开发人员、多个操作系统的系统管理员,以及许多不同主题的演讲者。当她不改变世界时,她喜欢烹饪、织锦,并看看各种应用程序堆栈如何处理表情符号。

2 条评论

“最近,包括*占星术*和数据科学在内的许多科学界” - 对不起?

我的错!我应该在编辑中注意到这一点。现在已修复(感谢您向我们指出这一点!)

回复 作者 MikeRSwain (未验证)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© 2025 open-source.net.cn. All rights reserved.