Skip to main content

Python项目编译器 - 将 .py 文件编译为 .pyd/.so 二进制文件,保护源代码并提升执行性能

Project description

CyBuilder - Python 项目编译器

CyBuilder 是一个 Python 项目编译工具,能够将 .py 源文件编译为 .pyd(Windows)或 .so(Linux/Mac)二进制文件,保护源代码并提升执行性能。

主要特性

  • 代码保护:将 Python 源码编译为二进制文件,防止源代码泄露
  • 性能优化:通过 Cython 编译提升代码执行速度
  • 增量编译:基于文件哈希和修改时间检测变化,只重新编译修改过的文件
  • 并行编译:多进程并行编译,充分利用多核 CPU
  • 配置文件:支持 .CyBuilder.toml 配置文件,无需每次传参
  • 多入口文件:支持指定多个入口文件,逗号分隔
  • 进度条:编译过程中显示实时进度
  • 完整打包:自动复制配置文件、图片资源等非 Python 文件

前置要求

  • Python 3.8 或更高版本
  • uv 包管理工具

快速开始

安装

uv tool install .

更新已安装版本:

uv tool install . --reinstall

基本使用

# 使用默认配置编译
CyBuilder

# 指定输出目录
CyBuilder -o output

# 指定入口文件
CyBuilder -e app.py

# 指定多个入口文件
CyBuilder -e main.py,cli.py

# 使用 8 个进程并行编译
CyBuilder -j 8

# 强制全量编译(禁用增量)
CyBuilder --no-incremental

# 禁用进度条(适用于 CI/CD)
CyBuilder --no-progress

# 查看当前生效的配置
CyBuilder --show-config

# 显示版本号
CyBuilder --version

也可以作为 Python 模块运行:

python -m CyBuilder

命令行参数

参数 简写 说明 默认值
--output -o 输出目录名称 dist
--entry -e 入口文件名,支持逗号分隔多个 main.py
--jobs -j 并行编译进程数 CPU 核心数
--boundscheck - 启用边界检查 启用
--no-boundscheck - 禁用边界检查(更快) -
--wraparound - 启用负数索引支持 启用
--no-wraparound - 禁用负数索引支持(更快) -
--sequential - 使用串行编译 禁用
--no-incremental - 禁用增量编译 -
--no-progress - 禁用进度条 -
--show-config - 显示当前配置并退出 -
--version -V 显示版本号并退出 -

配置文件

在项目根目录创建 .CyBuilder.tomlCyBuilder.toml

``toml [build] output = "dist" entry = ["main.py", "cli.py"] boundscheck = true wraparound = true

jobs = 4 # 并行进程数,注释则自动检测

incremental = true exclude = ["scripts/*"] # 额外排除的文件模式

[display] progress = true verbose = false


配置文件与命令行参数合并时,命令行参数优先。

## 编译流程

1. **扫描文件**:递归查找项目中所有 `.py` 文件
2. **增量检测**:对比文件哈希和编译产物修改时间,筛选需要编译的文件
3. **准备环境**:创建构建目录,安装编译依赖
4. **并行编译**:将文件按大小分组,多进程并行编译
5. **整理结果**:收集 `.pyd`/`.so` 文件到输出目录
6. **复制资源**:复制配置文件、图片等非 Python 文件
7. **更新缓存**:记录文件哈希和编译时间,供下次增量判断

## 项目结构

your-project/ ├── .CyBuilder.toml # CyBuilder 配置文件(可选) ├── main.py # 入口文件(不编译,直接复制) ├── module1.py # 待编译模块 ├── module2.py # 待编译模块 ├── config.toml # 配置文件(会自动复制) └── dist/ # 编译输出目录 ├── main.py # 入口文件(源码) ├── module1.pyd # 编译后的模块 ├── module2.pyd # 编译后的模块 └── config.toml # 配置文件


## 编译选项说明

- **边界检查(boundscheck)**:启用时在数组访问时进行边界验证,更安全但略慢
- **负数索引(wraparound)**:启用时支持 `arr[-1]` 语法,禁用后需使用正数索引

禁用这两个选项可获得最佳性能:

CyBuilder --no-boundscheck --no-wraparound


## 重要说明

### .pyd 文件的使用限制

编译生成的 `.pyd` 文件是 Python C 扩展模块,**不能直接执行**,只能在 Python 中导入使用:

```python
import module
module.some_function()

入口文件处理

  • 入口文件不会被编译,以源码形式复制到输出目录
  • 入口文件中的 if __name__ == "__main__": 可以正常运行
  • 可指定多个入口文件:CyBuilder -e main.py,cli.py,web.py

自动排除的目录

distbuildbuild_temp.venv__pycache__.gittests

跨平台支持

CyBuilder 完全支持跨平台编译,会根据操作系统自动生成对应的二进制文件:

操作系统 输出文件格式 示例文件名
Windows .pyd module.cp314-win_amd64.pyd
Linux .so module.cpython-310-x86_64-linux-gnu.so
macOS .so module.cpython-310-darwin.so

Linux 环境要求

在 Linux 上使用 CyBuilder 需要安装 C 编译器:

# Ubuntu/Debian
sudo apt-get install build-essential

# CentOS/RHEL
sudo yum groupinstall "Development Tools"

# Fedora
sudo dnf groupinstall "Development Tools"

macOS 环境要求

在 macOS 上需要安装 Xcode Command Line Tools:

xcode-select --install

增量编译的跨平台特性

CyBuilder 的增量编译功能会自动识别不同平台的编译文件:

  • 在 Windows 上检测 .pyd 文件
  • 在 Linux/macOS 上检测 .so 文件
  • 缓存数据与平台无关,可以安全地在不同系统间共享项目

开发

安装开发依赖

uv sync --group dev

运行测试

uv run pytest tests/ -v

许可证

MIT License

常见问题 (FAQ)

Q: CyBuilder 支持哪些操作系统?

A: CyBuilder 支持所有主流操作系统:

  • ✅ Windows 10/11
  • ✅ Linux(Ubuntu、CentOS、Fedora、Debian 等)
  • ✅ macOS(10.15+)

Q: 在 Linux 上编译失败怎么办?

A: 请确保已安装 C 编译器:

# 检查是否安装了 gcc
gcc --version

# 如果未安装,执行:
sudo apt-get install build-essential  # Ubuntu/Debian
sudo yum groupinstall "Development Tools"  # CentOS/RHEL

Q: .pyd 和 .so 文件有什么区别?

A: 它们是同一概念在不同平台的实现:

  • .pyd = Windows 平台的 Python 扩展模块(本质是 DLL)
  • .so = Linux/macOS 平台的共享对象文件(本质是动态库)
  • 功能完全相同,只是文件格式不同

Q: 能否在 Windows 上编译出 Linux 的 .so 文件?

A: 不能。Cython 编译需要目标平台的编译器:

  • Windows 上使用 MSVC 生成 .pyd
  • Linux 上使用 GCC 生成 .so
  • 需要在对应平台上分别编译

Q: 编译后的文件能在不同 Python 版本间通用吗?

A: 不能。编译文件与 Python 版本紧密相关:

  • module.cp314-win_amd64.pyd 只能用于 Python 3.14
  • module.cpython-310-x86_64-linux-gnu.so 只能用于 Python 3.10
  • 每个 Python 版本需要单独编译

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cybuilder-0.1.1.tar.gz (80.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cybuilder-0.1.1-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file cybuilder-0.1.1.tar.gz.

File metadata

  • Download URL: cybuilder-0.1.1.tar.gz
  • Upload date:
  • Size: 80.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for cybuilder-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4e243416ded886a420f0a72740803b51fb791ad7402611f4daa7984dd3428ef8
MD5 a62e174ed99d25bdbf4fa11ebb21d82c
BLAKE2b-256 17a7ae6d56555da602789fd85d5d8f996172ffe62ebd8fc0f2e1484f91a6f75c

See more details on using hashes here.

File details

Details for the file cybuilder-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: cybuilder-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 17.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for cybuilder-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 182d155f73599b2fbb8e18f7d7a923ff633d3727025736fc204c196ddbc99e19
MD5 803301c86e428cfe3a6f540cefb052fa
BLAKE2b-256 32079eb684cdc829bf4f4f6a9fa328af4e952cc4be146a23f06d4efe9343e714

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page