Flet 打包更新

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

Flet是一个将Python程序打包为移动设备的工具。它可以轻松打包只使用Python标准库的程序,但使用第三方包时会遇到问题。第三方包分为纯Python包和非纯Python包两种。纯Python包可以在任何带有Python的设备上运行,而非纯Python包需要为特定平台进行编译。打包过程可能复杂且耗时,尤其是对于非纯包。目前,Flet使用“Python for Android”工具来构建非纯包,但这种方法存在缺陷。未来,Flet计划使用Mobile Forge,一个可以为iOS和Android编译大多数非纯Python包的打包工具。他们还将创建一个公共的预构建包存储库。用户可以通过Flet讨论贡献到存储库并请求包。新的打包系统将使用自定义虚拟pip索引来分析依赖关系并提供移动包。新版本的Flet将在几周内发布。

🔎

延伸解读

纯Python包与非纯包的关键区别

文章指出,纯Python包只包含Python代码,可在任何有Python解释器的设备上运行;非纯包则包含C、C++、Rust等扩展,必须为特定平台编译。判断方法:在PyPI的“Download files”页面,若“Built distribution”下只有一个以-py3-none-any.whl结尾的wheel,则很可能是纯包。但需注意,纯包可能依赖非纯包,如pydantic依赖pydantic-core。

当前打包流程的五大痛点

Flet当前使用“Python for Android”(p4a)构建非纯包,存在多个问题:用户需自行安装p4a并编译模块;p4a的dist目录可能包含无关包;非纯包必须在运行flet build前构建;p4a的“recipes”可能过时或缺失;requirements.txt只能指定纯包,无法处理纯包间接依赖非纯包的情况。这些缺陷导致打包复杂且易出错。

未来打包方案:Mobile Forge与虚拟pip索引

Flet计划用Mobile Forge替代p4a,该工具基于crossenv,能为iOS和Android编译大多数非纯包,且只需添加meta.yaml文件。Flet将预构建常用非纯包并托管在公共仓库,同时创建“Packages”讨论区供用户请求和投票。新的flet build将使用自定义虚拟pip索引,自动分析依赖、检测非纯包并提供移动包,其他包则回退到PyPI。

对开发者的实际影响与建议

对于使用Flet打包移动应用的开发者,需注意:若应用依赖非纯包,当前需自行用p4a编译,过程繁琐;未来新系统将简化此流程。建议关注Flet的“Packages”讨论区,为所需包投票或提交请求,以帮助优先处理。同时,可使用pipgrip --tree分析依赖树,提前识别非纯包。新版本预计几周内发布,届时打包体验将改善。

❓

Q&A

Flet是什么?

Flet是一个将Python程序打包为移动设备的工具。

使用Flet打包第三方包时会遇到什么问题?

使用第三方包时,可能会遇到纯Python包和非纯Python包的兼容性问题,非纯包需要为特定平台编译,打包过程复杂且耗时。

Flet未来的计划是什么?

Flet计划使用Mobile Forge工具为iOS和Android编译非纯Python包,并创建公共的预构建包存储库。

什么是纯Python包和非纯Python包?

纯Python包仅包含Python代码,可以在任何设备上运行;非纯Python包则需要编译为特定平台的机器代码。

Flet如何处理依赖关系?

Flet的新打包系统将使用自定义虚拟pip索引来分析依赖关系,并提供移动包。

Flet的新版本什么时候发布?

Flet的新版本将在几周内发布,旨在改善打包体验。

🏷️

标签

➡️

继续阅读