Python生成pyd文件
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。
- 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。此处有两种方案。
方案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)
Python生成pyd文件的更多相关文章
- VNPY加密教程(Python生成pyd文件)
安装成功之后,再修改设置.让Cython可以找到vcarsall.bat.此处有两种方案.(我采用方案1,亲测可用.方案2未测试,看似可用.) 方案1:修改Python安装目录的文件设置 window ...
- windows平台 python生成 pyd文件
Python的文件类型介绍: .py python的源代码文件 .pyc Python源代码import后,编译生成的字节码 .pyo Python源代码编译优化生成的字节 ...
- Python生成pyc文件
Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过python解释器最终会生成机器码运行.所以pyc文件是可以跨平台部署的,类似Java的.c ...
- pyx文件 生成pyd 文件用于 cython调用
转于:https://www.2cto.com/kf/201405/304168.html 1. 初衷 最近学用python,python不愧是为程序员考虑的编程语言,写起来很快很方便,大大节省开发效 ...
- python 生成 pyc 文件
以 pyc 为扩展名的是Python的编译文件.其执行速度快于 py 文件且不能用文本编辑编辑查看.所以 pyc 文件往往代替 py 文件发布. Python 在执行时,首先会将 py 文件中的源代码 ...
- python生成xml文件
先上代码: #!/usr/bin/env python3 # _*_ coding: utf-8 _*_ from xml.dom.minidom import Document def readFi ...
- Python生成gexf文件并导入gephi做网络图分析
Gephi是一款优秀的复杂网络分析软件,支持导入多种格式的文件.gexf格式是Gephi 推荐的格式,基于 XML.本文是一个用python写的简单Demo,示例如何生成一个典型的gexf格式文件.代 ...
- 使用python生成c文件模板
目标 完成一个python脚本,实现指定名字后,自动生成.c和.h的模板.例如: /** * @file epc.c * @author 陈维 * @version V01 * @date 2017. ...
- python 生成 xml文件 属性的顺序问题
需求很奇葩. 文档示例 <ITEM key="username" eng="User Name" chn="用户名" val=&quo ...
随机推荐
- Python 3 实现色情图片识别
Python 3 实现色情图片识别 项目简介 项目内容 本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图片处理库,会编写算法来划分图像的皮肤区域. 项目知识点 Py ...
- opencv学习之路(11)、图像几何变换
一.图像缩放 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src=imread("E:// ...
- JAVA中拆箱和装箱
浅谈JAVA中拆箱与装箱 一. 什么是装箱?什么是拆箱? 在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i = new Integer(10) ...
- topcoder srm 490 div1
problem1 link 首先每$n*m$一定是一个循环,所以只需要考虑时间$[0,n*m-1]$即可.这个期间一共出现了$n$个,第i个的出现时间为$m*i$,离开的时间为$\left \lcei ...
- newcoder 筱玛的迷阵探险(搜索 + 01字典树)题解
题目描述 筱玛是个快乐的男孩子. 寒假终于到了,筱玛决定请他的朋友们一起来玩迷阵探险. 迷阵可以看做一个n×nn×n的矩阵A,每个格子上有一个有一个数Ai,j. 入口在左上角的(1,1)处,出口在右下 ...
- 外观模式Facade pattern
http://www.runoob.com/design-pattern/facade-pattern.html 外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一 ...
- vue中使用BetterScroll
BetterScroll可以通过给content加min-height实现永远滚动 content千万不可以删除,千万不要在 content上写v-if
- 深度学习课程笔记(一)CNN 卷积神经网络
深度学习课程笔记(一)CNN 解析篇 相关资料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html 首先提到 Why CNN for I ...
- 【sql server】索引详解
索引可以理解为一种特殊的目录结构. sql server提供两种索引形式: 聚集索引和非聚集索引. 怎么理解这两种形式. 拿我们常用的字典举例来说, 一个字典好比数据库中的一个表.那么当我们想从字典中 ...
- Linux命令3——c
cal:calender,显示月历 -j:用凯撒历(dates of julius caesar)的形式来显示月历,不分月份.1-365/366 -m:显示月历时,把星期一定为一周的开始.默认星期日为 ...