[真·跨平台] Python 打包新思路

2025 年 5 月 24 日
 Tanix2

最近 Python 环境管理从 conda 切换到了uv,找到之前用 cargo 的感觉了,真爽。

我发现 uv 可以下载独立的 Python ,非常感兴趣,因为之前经常使用 Embedded Python 打包东西。Embedded Python 只支持 Windows ,而 uv 支持 Windows/Linux/MacOS 。

同时我又遇见了一个很 amazing 的项目,叫cosmopolitan,它可以将 C/C++编译为一种叫APE的格式的文件,这种神奇的格式同时满足多种文件格式,因此它可以在大多数主流的平台上运行。

受以上两个项目启发,pyfuze 诞生了。它可以将你的 Python 项目打包,使其可以在大多数主流平台上运行。pyfuze 跨平台的逻辑是这样的:

项目缺点是需要网络下载东西,不过你可以运行一下再打包,但这样就固定在你运行的平台了。

截至目前,pyfuze 项目已获得 25 颗星,是我获得 star 最多的一个项目。如果你也喜欢这个项目,不妨也点颗⭐:)

P.S. uv 、python 、依赖都是从国外网络环境下载的,如需在国内网络环境下运行,需使用--env 、--uv-install-script-windows 以及--uv-install-script-unix 这三个选项,后两个选项支持使用文件路径。

7233 次点击
所在节点    Python
31 条回复
Tanix2
2025 年 5 月 26 日
@iorilu 目前的话国内 uv 的镜像有一些,但是不全。我写了个项目来建立 uv installer 、uv binary 、uv python 的镜像: https://github.com/TanixLu/uv_aliyun_mirror

我部署了一个,使用方式:--uv-install-script-windows https://uv-mirror-fc-uv-mirr-service-qirrgrgrbr.cn-hangzhou.fcapp.run/uv-installer.ps1 --uv-install-script-unix https://uv-mirror-fc-uv-mirr-service-qirrgrgrbr.cn-hangzhou.fcapp.run/uv-installer.sh --env INSTALLER_DOWNLOAD_URL=https://uv-mirror-fc-uv-mirr-service-qirrgrgrbr.cn-hangzhou.fcapp.run --env UV_PYTHON_INSTALL_MIRROR=https://uv-mirror-fc-uv-mirr-service-qirrgrgrbr.cn-hangzhou.fcapp.run --env UV_DEFAULT_INDEX=https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

(最后一个选项是使用 pypi 清华源镜像)
Tanix2
2025 年 5 月 26 日
@cat9life 比方说你写了一个小工具要在多个环境上用;或者你写了一个小玩具想给朋友们分享,但是他们没有 python 环境。
Tanix2
2025 年 5 月 26 日
每个工具有它的优点和局限性,我这个工具的优点是跨平台,只用打包一次
Tanix2
2025 年 5 月 26 日
@zwzwzwzwzxt 我之前看到过相关的一篇文章,好像是不太好弄,rust 编译器有的东西是写死在里面的: https://ahgamut.github.io/2022/07/27/ape-rust-example/
Tanix2
2025 年 5 月 26 日
@tairan2006 那别人得有 docker 啊,要是用户没有 docker 怎么办?我这个的依赖可以说就一个网络。
zwzwzwzwzxt
2025 年 5 月 26 日
@Tanix2 #24 哈哈这个项目我有看,不知道是太老了还是 demo 太简单了,我遇到了一个大坑就是 LLVM 编译默认会插入栈保护代码,在 aarch64 下还会占用 `x28` 寄存器,导致莫名崩溃。好在这俩可以通过添加编译参数解决,目前没出现莫名崩溃的问题了。

再一个坑就是标准库,某些操作直接走 syscall 没走 libc ,还有一些 flag 等参数值在其他平台上不兼容,必须得 patch 标准库。。
BBBOND
2025 年 5 月 26 日
还得是 pyinstaller
Tanix2
2025 年 5 月 26 日
@zwzwzwzwzxt 确实没研究过这方面,不了解了
frostming
2025 年 5 月 28 日
tomczhen
2025 年 5 月 28 日
都要联网了,直接打包成 whl 然后 uvx 来运行应该更直接。
Tanix2
2025 年 6 月 3 日
@tomczhen 我研究研究

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1133945

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX