# setup.py """Cython 编译脚本 — 将核心业务 .py 文件编译为 .pyd/.so 防止反编译。 用法: python setup.py build_ext --inplace # 原地编译(开发测试) python setup.py build_ext # 输出到 build_libs/ """ from setuptools import setup, find_packages from Cython.Build import cythonize import os # ============================================================ # 1. 明确指定要加密保护的核心业务文件(千万不要把 main.py 放进去) # ============================================================ py_modules = [ # 根目录业务文件 "api.py", "controllers.py", "PcControl.py", "ind_collector.py", "get_V.py", "styles.py", # 许可证模块(含公钥 + 验签逻辑,编译后不可篡改) "license_utils.py", # core/ 业务逻辑层 "core/__init__.py", # 模块级验签入口,import 时自动触发 "core/connection_manager.py", "core/control_engine.py", "core/model_manager.py", "core/data_collector.py", "core/identification.py", "core/identification_config.py", "core/identification_feedback.py", "core/volume_config.py", ] # 过滤掉本地不存在的文件,防止报错 py_modules = [f for f in py_modules if os.path.exists(f)] # ============================================================ # 2. 编译器优化指令 # ============================================================ compiler_directives = { 'language_level': "3", # Python 3 语义 'boundscheck': False, # 关闭数组越界检查(提升性能) 'wraparound': False, # 关闭负索引检查 'cdivision': True, # C 除法语义(更快) 'always_allow_keywords': False, # 不生成 **kwargs(减小体积) } setup( name="PressureControlCore", version="1.0.0", python_requires=">=3.8", packages=find_packages(include=["core", "core.*"]), ext_modules=cythonize( py_modules, compiler_directives=compiler_directives, annotate=False, # 不生成 html 报告,减少垃圾文件 build_dir="build_libs/temp", # .c 文件的临时目录 force=True, # 强制重新生成 .c 文件(防止用旧缓存) ), options={ "build_ext": { "build_lib": "build_libs", # 最终 .pyd/.so 输出目录 "build_temp": "build_libs/temp" # 中间 .c 和 .o 输出目录 } }, )