70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
# 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 输出目录
|
|
}
|
|
},
|
|
)
|