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。

  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)

原文地址:https://www.cnblogs.com/GavinSimons/p/8359284.html

时间: 2024-11-08 14:46:54

Python生成pyd文件的相关文章

Python生成exe文件

一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序.py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序.py2exe是发布在开源许可证下的.目前只有python2.x的才有对应版本的. 二.安装py2exe 从http://prdownloads.sour

Python生成pyc文件

pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过Python解释器最终会生成机器码运行 为什么要手动提前生成pyc文件呢,主要是不想把源代码暴露出来. python -m foo.py    #生成单个pyc文件

使用Python生成pdf文件

Python平台的优秀PDF报表类库Reportlab.它不属于Python的标准类库,所以必须手动下载类库包并安装:       yum install python-reportlab -y    这篇文章将介绍reportlab中基本常用的api,使用canvas画出一份整洁的PDF报表.详细内容参考reportlab的官方user guide. 示例一.生成一段文字 #!/usr/bin/python from reportlab.pdfgen import canvas def hel

python生成.exe文件

python生成.exe,可以使用pyinstaller模块 在windows下,打开powershell,cd到当前目录,使用 pyinstaller -F test.py 会在当前文件夹下生成一个dist的文件夹 文件test.exe在该文件夹下,可以直接使用 主要选项: -D,创建一个目录,包含exe文件,但会以来很多文件 -c,使用控制台,无界面 -W,使用窗口,无控制台

python生成xml文件

先上代码: 1 #!/usr/bin/env python3 2 # _*_ coding: utf-8 _*_ 3 5 from xml.dom.minidom import Document 6 7 def readFile(filename, lines): 8 with open(filename, 'r') as f: 9 for line in f: 10 line = line.rstrip(' \n') 11 if line.startswith('//') or len(lin

python 生成mybatis文件

entity文件 # coding=utf-8 import MySQLdb import sys dbhost='192.168.2.200' dbport=3306 dbuser='root' dbpassword='zufangbao69fc' dbname='OrderCenter' dbtypes = {'int':'Integer', 'bigint':'Long', 'bit':'Boolean', 'datetime':'Date', 'decimal':'BigDecimal'

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

需求很奇葩. 文档示例 <ITEM key="username" eng="User Name" chn="用户名" val="小明"/> 用python 的xml 导出的xml文件,相应的内容是 <ITEM  chn="用户名" eng="User Name" key="username" val="小明"/> 我们都知道

python 生成日志文件

import logging name=input() logging.basicConfig(filename=r'C:\Program Files\log.txt',datefmt='%Y-%m-%d %H:%M:%S %p',level=logging.DEBUG,format='%(asctime)s-%(message)s') logging.debug('print your name:'+name) filemode: 'w'或'a',默认是'a'format:  %(leveln

python读取和生成excel文件

今天来看一下如何使用python处理excel文件,处理excel文件是在工作中经常用到的,python为我们考虑到了这一点,python中本身就自带csv模块. 1.用python读取csv文件: csv是逗号分隔符格式 一般我们用的execl生成的格式是xls和xlsx  直接重命名为csv的话会报错: Error: line contains NULL byte insun解决方案:出错原因是直接是把后缀为xls的execl文件重命名为csv的 正常的要是另存为csv文件 就不会报错了 譬