DevTrends开发者趋势
主题色

xxnuo /

py2dist

py2dist 源码仓库 项目起源: 有时候需要发布 Python 项目,但是不希望客户自己乱改代码导致出问题,所以需要能够简单的保护源码文件。 因为 Python 的设计哲学就是发布源代码,所以 CPython 并没有真正的编译功能,但是有许多人做了这方面的工作了。 我比较了现在比较流行的几个项目: Nuitka 的编译是真编译,经过特殊优化将 Python 代码编译成 C 代码,因此一些第三方包还要单独适配和设置,并且有时候包多了编…

DT软件开发DT命令行工具DTLinuxDTmacOSDTWindows

关于

py2dist 源码仓库 项目起源: 有时候需要发布 Python 项目,但是不希望客户自己乱改代码导致出问题,所以需要能够简单的保护源码文件。 因为 Python 的设计哲学就是发布源代码,所以 CPython 并没有真正的编译功能,但是有许多人做了这方面的工作了。 我比较了现在比较流行的几个项目: Nuitka 的编译是真编译,经过特殊优化将 Python 代码编译成 C 代码,因此一些第三方包还要单独适配和设置,并且有时候包多了编译时间会很长,用了一段时间遂放弃。 Pyarmor 专注于混淆加密,试了一下其实工作倒是正常,但是没有选择这个项目,因为我并不需要它的许多加密混淆功能,而且它是商业软件需要付费买机器许可证,所以没有选择这个工具。 Cython 完全兼容现代 Python 版本和生态,虽然纯 .py 代码的编译并非真的编译为 C 代码,但是也足够满足一般的保护源代码不被修改的目的了。 工作流完善使用了一段时间了,没有问题,所以将这个项目写成一个工具包方便安装使用并发布😊。 这个项目不涉及加密混淆,有这方面的需要可以自行优化。 简要介绍 py2dist 是一个使用 Cython 将 Python 源代码编译为二进制扩展模块(.so/.pyd)的工具,用于简单地保护源代码不被更改,适用于发布 Python 项目、Docker 服务镜像的构建等场景。 功能 支持 Linux、Mac、Windows 平台 支持将单个 .py 文件或整个目录编译为二进制文件 保持目录结构,自动复制其他文件到输出目录 支持排除指定文件或目录 自动检测并使用 ccache 加速编译 获得 Cython 编译带来的一点性能提升 提供 CLI 和 Python API 两种使用方式 安装 bash pip install py2dist 建议使用 uv 安装和管理虚拟环境,并固定 Python 版本号,避免版本不一致导致编译结果与实际运行环境不一致。以 Python 3.12 为例: bash uv python pin 3.12 uv venv uv add --dev py2dist 不建议使用 uv tool install py2dist 方法安装,因为这样的话会调用系统的 Python 版本编译,导致编译结果与实际运行的虚拟环境环境不一致。 使用 编译单个文件: bash py2dist -f myscript.py 或使用 uv 命令: bash uv run py2dist -f myscript.py 输出文件位置为 dist/myscript.so 编译整个目录: bash python3 -m py2dist -d myproject 或使用 uv 命令: bash uv run py2dist -d myproject 输出文件位置为 dist/myproject,并且会自动复制非 .py 文件到输出目录。 编译生成的二进制扩展模块(.so/.pyd)与特定的 Python 版本绑定。您必须确保编译时使用的 Python 版本与运行时使用的 Python 版本完全一致(包括次要版本号,例如 3.10 和 3.11 是不兼容的)。 复杂使用场景介绍详见:

收录记录

  1. 阮一峰周刊·用户投稿

    2025年12月30日 · 1 次收录

  2. 阮一峰周刊·正刊推荐

    2026年1月9日 · 1 次收录

讨论这个产品