Python的脚本文件是开源的,量化策略的安全性没有保障。因此需要保护源码。那么要对Python代码进行混淆、加密保护。

混淆代码,我准备使用pyminifier。而加密处理,就比较麻烦。

Python有py、pyc、pyw、pyo、pyd等文件格式。

其中,pyc是二进制文件。但很容易被反编译。

pyw也不行,只是隐藏命令行界面而已,可以作为入口脚本。

pyo和pyc差不多,也容易被反编译。

最后剩下pyd格式。pyd格式是D语言(C/C++综合进化版本)生成的二进制文件,实际也会是dll文件。该文件目前位置没找到可以被反编译的消息,只能被反汇编。Sublime text编辑器也是使用该格式。

Python的py文件生成pyd文件步骤如下。

1、安装Cython

可以使用pip命令安装Cython。

  1. 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):

  1. #coding:utf-8
  2. def hello():
  3. print("Hello world")
  4. input("<press ENTER to quit>")

在该目录下,再新建一个py文件(命名为setup.py):

  1. from distutils.core import setup
  2. from Cython.Build import cythonize
  3. setup(
  4. name = 'Hello world app',
  5. ext_modules = cythonize("test.py"),
  6. )

接着,再打开cmd,跳到该目录并执行如下命令:

  1. python setup.py build_ext --inplace

最终生成pyd文件

其中,build是生成过程使用到的临时文件。test.c也是临时文件,可以打开看看传说中的D语言代码。

test.pyd是我们所需的文件。

pyd文件可以像平常一样使用import引入模块的方式正常使用。

后来,我尝试使用py2exe打包pyd文件。还需要创建一个入口脚本(命名为index.py):

  1. import test
  2. if __name__=="__main__":
  3. 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)

Python生成pyd文件的更多相关文章

  1. VNPY加密教程(Python生成pyd文件)

    安装成功之后,再修改设置.让Cython可以找到vcarsall.bat.此处有两种方案.(我采用方案1,亲测可用.方案2未测试,看似可用.) 方案1:修改Python安装目录的文件设置 window ...

  2. windows平台 python生成 pyd文件

    Python的文件类型介绍: .py       python的源代码文件 .pyc     Python源代码import后,编译生成的字节码 .pyo     Python源代码编译优化生成的字节 ...

  3. Python生成pyc文件

    Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过python解释器最终会生成机器码运行.所以pyc文件是可以跨平台部署的,类似Java的.c ...

  4. pyx文件 生成pyd 文件用于 cython调用

    转于:https://www.2cto.com/kf/201405/304168.html 1. 初衷 最近学用python,python不愧是为程序员考虑的编程语言,写起来很快很方便,大大节省开发效 ...

  5. python 生成 pyc 文件

    以 pyc 为扩展名的是Python的编译文件.其执行速度快于 py 文件且不能用文本编辑编辑查看.所以 pyc 文件往往代替 py 文件发布. Python 在执行时,首先会将 py 文件中的源代码 ...

  6. python生成xml文件

    先上代码: #!/usr/bin/env python3 # _*_ coding: utf-8 _*_ from xml.dom.minidom import Document def readFi ...

  7. Python生成gexf文件并导入gephi做网络图分析

    Gephi是一款优秀的复杂网络分析软件,支持导入多种格式的文件.gexf格式是Gephi 推荐的格式,基于 XML.本文是一个用python写的简单Demo,示例如何生成一个典型的gexf格式文件.代 ...

  8. 使用python生成c文件模板

    目标 完成一个python脚本,实现指定名字后,自动生成.c和.h的模板.例如: /** * @file epc.c * @author 陈维 * @version V01 * @date 2017. ...

  9. python 生成 xml文件 属性的顺序问题

    需求很奇葩. 文档示例 <ITEM key="username" eng="User Name" chn="用户名" val=&quo ...

随机推荐

  1. 一种基于 Numpy 的 TF-IDF 实现报告

    一种基于 Numpy 的 TF-IDF 实现报告 摘要 本文使用了一种 state-of-the-art 的矩阵表示方法来计算每个词在每篇文章上的 TF-IDF 权重(特征).本文还将介绍基于 TF- ...

  2. 【4opencv】CLR基本原理和如何运用于GOCW

    GOCW的重点和难点就在于Csharp调用OpenCV,其中的桥梁就是CLR,当然我们也有其他方法,但是CLR是一个比较新的.比较可靠的.关键是能用的桥梁.这里关于CLR的基本原理知识.如何用于GOC ...

  3. OpenCV常用库函数[典]

    一.core 模块 1.Mat - 基本图像容器 Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是 ...

  4. bzoj 4289 Tax - 最短路

    题目传送门 这是一条通往vjudge的神秘通道 这是一条通往bzoj的神秘通道 题目大意 如果一条路径走过的边依次为$e_{1}, e_{2}, \cdots , e_{k}$,那么它的长度为$e_{ ...

  5. Base64编码为什么会使数据量变大?

    当把byte[]通过Convert.ToBase64String转换成Base64编码字符串时数据量明显变大,为何呢?这里就得先探究一下什么是Base64编码. Base64编码的思想是是采用64个基 ...

  6. Loader

    1.定义 可以把Loader当做一个占位符,即占有屏幕的某一个空间,当加载了组件之后,这个空间就能显示相应的图形了.所以可以给Loader设置anchor布局 2.加载组件 source:加载QML文 ...

  7. 设置Eclipse具有字母自动联想

    Window->Preferences->Java->Editor->ContentAssist(内容助手)里面的Enable auto activation里面第二行再加上a ...

  8. topcoder srm 694 div1 -3

    1.给出$n$个数字,将其分成三个非空的组,每组的权值为该组所有数字的抑或.选择一种分法使得三组的权值和最大? 思路:记录前两组的权值且三组有没有数字时第三组的值.(当前两组的值知道时第三组的权值是确 ...

  9. 浅谈Java中static关键字、权限修饰符

    1.实例变量:也称非静态成员变量,实例变量前没有static关键字,用来描述同一类事物的公共属性.访问方式:对象名.变量名.实例变量存储在堆区,对象有n个,数据就有n个.实例变量随着对象的创建而创建, ...

  10. P3261 [JLOI2015]城池攻占

    思路 左偏树维护每个骑士的战斗力和加入的深度(因为只能向上跳) 注意做乘法的时候加法tag会受到影响 代码 #include <cstdio> #include <algorithm ...