项目结构
其中wjxPostUse.py依赖wjxPostType.py中的函数,如下图现在需要将这个项目交付给甲方,但是不想泄露源码。运行前需要对wjxPostUse.py做自定义修改,所以不能直接生成exe。wjxPostUse.py无需加密,wjxPostType.py需要加密,但是不能影响wjxPostUse的正常导入。
CPython
Cython 是一种编程语言,主要目的是让 Python 可以与 C 无缝集成,并且可以将 Python 代码编译成高效的 C 代码,从而生成可执行文件或 Python 的扩展模块( .pyd
文件)。Cython 可以将 Python 代码编译为 C 扩展,实现保护代码的效果。
编译步骤
from setuptools import setup
from Cython.Build import cythonize
setup(
# ext_modules 参数指定要编译的扩展模块
# cythonize 函数将 wjxPostType.py 文件转换为扩展模块
# compiler_directives={'language_level' : "3"} 表示使用 Python 3 的语法
ext_modules=cythonize("wjxPostType.py", compiler_directives={"language_level": "3"})
)
终端运行这条命令会执行 setup.py
文件中的配置,使用 Cython 将 wjxPostType.py
文件编译成扩展模块。
python setup.py build_ext --inplace
可以看到生成了一个一系列文件,wjxPostType.c是中间产物,可以删除。
wjxPostType.cp310-win_amd64.pyd即所需的模块。将其放在python的安装目录中,即可直接导入
将wjxPostType.cp310-win_amd64.pyd还原成源码难度较高,可以放心交付~yeah