chongming

chongming-cli (0.3.6)

Published 2026-10-14 11:25:20 +08:00 by chakcy

Installation

pip install --index-url http://124.71.68.6:3000/api/packages/chongming/pypi/simple/ --extra-index-url https://pypi.org/simple chongming-cli

About this package

chongming 命令脚本集合:构建打包 / 进程插件打包 / 插件脚手架 / 模型生成 / 机器码授权签发

chongming-cli

chongming 网关的命令脚本集合,独立包维护。

命令

命令 说明
build 应用构建打包(PyInstaller / Nuitka)
build_plugin 进程插件项目根直接压缩为可部署 zip
gen_models 从插件配置 *.toml 生成 Pydantic 模型
gen_plugin 生成风格统一的 Worker 插件骨架(--process 生成进程插件完整项目)
migrate_plugin 内置插件一键迁移为进程插件(src/plugins/<name> → workers/<name>/)

另有 chongming_cli.code_content 模块:将目录下代码文件汇总为 Markdown(python -m chongming_cli.code_content <dir>)。

用法

在 chongming 网关项目根目录下(已通过 path/git 依赖安装本包):

uv run build pyinstaller        # 构建打包(默认:明文模块、不带授权)
uv run build --only mbank       # 仅重新打包 .mbank 模块文件(跳过其余流程)
uv run build --only mbank,vue   # 只执行指定步骤
uv run build --encrypt --license  # 对外分发:加密模块 + 注入厂商授权公钥
uv run build_plugin demo        # 进程插件打包 → dist/demo.zip(= workers/demo/ 直接压缩)
uv run gen_plugin myplugin                      # 生成 inline 插件骨架
uv run gen_plugin myplugin --process            # 生成进程插件完整项目(workers/myplugin/)
uv run gen_models config/workers/myplugin src/plugins/myplugin        # inline 插件模型
uv run gen_models workers/myplugin/config/workers/myplugin workers/myplugin/workers/myplugin   # 进程插件模型
uv run migrate_plugin myplugin --dry-run        # 内置插件迁移为进程插件(仅演练)
uv run migrate_plugin myplugin                  # 实际迁移:建项目 + 迁移代码/配置/依赖 + 删源

migrate_plugin 前置检查(命中则拒绝迁移,--force 跳过):插件挂载了自定义 FastAPI 路由(APIRouter,external 插件挂不了,需先改成 TOML @rpc_method 端点 或保持 inline);插件导入了网关包(app / chongming,进程插件与网关零导入关系)。 迁移后依赖从 plugins_deps.toml 的 [<name>] 节(按代码实际 import 过滤)转入 新项目 pyproject.toml,该节自动注释掉 —— 依赖随插件走,不再进网关 exe。

build --only <step> 可选步骤:mbank / prepare / obfuscate / pack / clean / license_guard / vue,可逗号分隔或重复传多个。

build 的两个开关默认都关(不加参数即内部调试产物:明文模块、不带授权,横幅与构建报告里会回显状态):

  • --encrypt:打开加密与混淆 —— .mbank 加密存字节码并写 .key 密钥文件、做 PyArmor 混淆
  • --license:打开授权 —— 注入厂商授权公钥(缺公钥则构建失败)、跑授权私钥泄漏守卫

打包收集清单分两处:网关本体依赖在根 config.toml [pyinstaller_build_import]; 内置插件专属依赖(网关本体不 import、只在插件里用)在根目录 plugins_deps.toml (按插件分节,可选文件),pack 时自动并入 --hidden-import / --include-module。

Nuitka 打包的环境要求(Linux)

  • patchelf 必需(standalone/onefile 都要):已列进网关 dev 依赖(uv sync 自动带), 也可 sudo apt install patchelf。Nuitka 直到链接完成后才检查它——缺失会白跑一整轮 编译,build 已改为提前失败提示
  • 链接器:默认 GNU ld 链接大工程峰值数 GB,小内存机器/WSL 上会被 OOM 杀掉 (clang: unable to execute command: Killed)。检测到 ld.lld 时自动经 LDFLAGS 换成 lld(内存与耗时都低得多)
  • 内存档位(按 MemAvailable 自动选):≥ 6 GB 完整优化(--lto=yes); < 6 GB 去 LTO(LTO 链接峰值 3 GB+,实测 GNU ld 与 lld 都会被 OOM 杀掉); < 2.5 GB 再 --low-memory 降并发。CHONGMING_NUITKA_LOW_MEM=1 强制省内存档、 CHONGMING_NUITKA_FULL=1 强制完整优化
  • PGO 默认关闭:Nuitka 4.3 的 --pgo-c 与 standalone/onefile 不兼容(Nuitka 自身 WARNING 后 FATAL),且 profiling 运行会启动程序等它退出——常驻服务会卡死; 能自行退出的程序可设 CHONGMING_NUITKA_PGO=1 打开
  • 失败自动逐档重试:完整优化 → 去 LTO/UPX → 去 LTO/UPX + --low-memory

项目根目录定位

脚本需要在项目根目录下读写 config/、src/plugins/、workers/ 等路径。 本包安装位置不固定(site-packages),因此根目录按以下顺序解析:

  1. 环境变量 CHONGMING_ROOT(显式指定项目根)
  2. 当前工作目录向上查找第一个含 pyproject.toml 的目录(即项目根)

开发

uv pip install -e utils/cli     # 本地可编辑安装

Requirements

Requires Python: >=3.12
Details
PyPI
2026-10-14 11:25:20 +08:00
5
58 KiB
Assets (1)
Versions (16) View all
0.3.7 2026-10-14
0.3.6 2026-10-14
0.3.5 2026-10-13
0.3.4 2026-10-13
0.3.3 2026-10-13