Python 的脚本文件是开源的, 量化策略的安全性没有保障因此需要保护源码那么要对 Python 代码进行混淆加密保护
混淆代码, 我准备使用 pyminifier 而加密处理, 就比较麻烦
Python 有 pypycpywpyopyd 等文件格式
其中, pyc 是二进制文件但很容易被反编译
pyw 也不行, 只是隐藏命令行界面而已, 可以作为入口脚本
pyo 和 pyc 差不多, 也容易被反编译
最后剩下 pyd 格式 pyd 格式是 D 语言 (C/C++ 综合进化版本) 生成的二进制文件, 实际也会是 dll 文件该文件目前位置没找到可以被反编译的消息, 只能被反汇编 Sublime text 编辑器也是使用该格式
Python 的 py 文件生成 pyd 文件步骤如下
1 安装 Cython
可以使用 pip 命令安装 Cython
pip install cython
2 处理 vcvarsall.bat
若不处理, 可能会出现 Unable to find vcvarsall.bat 错误
安装 Cython 之后, 还需要指定 vcvarsall.bat 的位置
vcvarsall.bat 是 VC 编译 Python 环境的文件之一而 vcvarsall.bat 需要安装 VC For Python2.7 我的 Python 是 2.7, 刚好可以使用这个至于 3.x 版本不知道微软更新了没有
下载地址: VCForPython27.msi
安装成功之后, 再修改设置让 Cython 可以找到 vcarsall.bat 此处有两种方案
方案 1: 修改 Python 安装目录的文件设置
方案 2: 修改注册表
我采用方案 1, 亲测可用方案 2 未测试, 看似可用
3 创建工作目录并生成 pyd 文件
这里有一个坑程序所在的目录路径不能包含中文文字所以我在 E 盘下创建一个 test 文件夹, 用于放置要处理的 python 文件
简单写了一个测试文件 (命名为 test.py):
#coding:utf-8
def hello():
print("Hello world")
input("<press ENTER to quit>")
在该目录下, 再新建一个 py 文件 (命名为 setup.py):
from
distutils.core import setup
from
Cython
.Build import cythonize
setup(
name = Hello world app,
ext_modules
= cythonize("test.py"),
)
接着, 再打开 cmd, 跳到该目录并执行如下命令:
python setup.py build_ext --inplace
最终生成 pyd 文件
其中, build 是生成过程使用到的临时文件 test.c 也是临时文件, 可以打开看看传说中的 D 语言代码
test.pyd 是我们所需的文件
pyd 文件可以像平常一样使用 import 引入模块的方式正常使用
后来, 我尝试使用 py2exe 打包 pyd 文件还需要创建一个入口脚本 (命名为 index.py):
import test
if __name__=="__main__":
test.hello()
为了方便打包, 我重新创建一个目录把 index.py 和 test.pyd 复制到该目录
如何安装和使用 py2exe 这里我就不说了, 自行百度一下
分别用 test.pyd 和未处理的 test.py 打包效果如下:
1) 用 test.pyd
直接可以在 index.exe 对应的位置找到该文件
2) 用 test.py
在该目录下没有 test.py 文件该文件在 library.zip 中
测试结果, 用 py2exe 可以正常使用 pyd 文件
ps: 若用 Cython 出现如下错误, 说明文件的编号和 python 脚本设置 #coding 设置的编码不一致保存一致编码即可解决该问题
Decoding error, missing or incorrect coding=<encoding-name> at top of source (cannot decode with encoding utf8: invalid start byte)
来源: http://www.bubuko.com/infodetail-2482493.html