当前位置: 首页 > news >正文

python文件批量生成pyd文件(pthon隐藏源码)

       Python有py、pyc、pyw、pyo、pyd等文件格式,其中除py其他格式起到了不暴露源码的作用,相当于c语言中的动态库。Python的脚本文件是开源的,若直接发布桌面软件问题很严重。因为这是公司的产品,需要保护源码。那么要对Python代码进行混淆加密保护。Python有py、pyc、pyw、pyo、pyd等文件格式。其中,pyc是二进制文件。但很容易被反编译。pyw也不行,只是隐藏命令行界面而已,可以作为入口脚本。pyo和pyc差不多,也容易被反编译。最后剩下pyd格式。pyd格式是D语言(C/C++综合进化版本)生成的二进制文件,实际也会是dll文件。该文件目前位置没找到可以被反编译的消息,只能被反汇编。Sublime text编辑器也是使用该格式。本文则就如何将py文件生成pyd文件并进行调用的具体过程进行介绍。

一、安装Cython

     进入python报的安装目录,输入pip命令进行安装Cython,具体命令代码如下:

pip install Cython

   执行命令后的结果如下所示:本文选择的是python 3.7 环境,执行完毕后,则安装Cython成功。

  

二、创建工作目录并生成pyd文件

1.创建src文件目录

本文中在“1封装Python代码”目录下,创建src源码文件夹目录,其项目结构如下图所示

2.创建需要隐藏源码的py文件,并书写代码

    本文中创建名称为“personMana.py”的文件,该文件内部封装了名称为“personMana”的类,该类中定义了两个方法名称分别为“say()”函数和“sayTest()”函数.具体代码如下:

class personMana:def __init__(self):print("")#自定义函数def say(self,lanage):_lanage="您输入的内容是-》"+str(lanage)return  _lanagedef sayTest(self,msg, name):_res=msg+namereturn _res

3.书写将py文件生成pyd文件的代码

    创建名称为“setup.py"来存储py文件生成pyd文件的代码。     本文主要将src目录下的所有py文件生成pyd文件,由于本文只生成personMana.py文件,而“setup.py”文件不需要生成,具体代码实现如下:

# setup.py
import shutilfrom distutils.core import setup
from Cython.Build import cythonize
import os
directory = '.'  # 设置源代码所在的目录,这里设置为当前目录
to_directory='../app/'#设置将需要调用的pyd文件拷贝的应用目录下
# 获取该目录下所有的文件名
sources = [os.path.join(directory, file)for file in os.listdir(directory)if file.endswith('.py') and  file not in ["main.py"]  and file not in ["setup.py"]]
setup(ext_modules=cythonize(sources)
)#复制文件到应用目录
exesource = [os.path.join(directory, file)for file in os.listdir(directory)if file.endswith('.pyd')]for a in exesource:fpath, fname = os.path.split(a)#将生成的pyd文件拷贝到应用的目录中shutil.copy(a, to_directory + fname.replace('.cp37-win_amd64',''))          # 复制文件

4.运行setup.py文件,得到需要的结果

第一种运行方式:

在PyCharm Community Edition 2021.2.1工具中运行,首先配置形参其命令如下:

build_ext --inplace

接着选择Python解释器

第二种运行方式

通过命令进行运行,命令如下

python setup.py build_ext --inplace

5.在app目录下建立main.py文件调用该类

具体代码如下

from  personMana import *if __name__ == '__main__':_personMana=personMana()ce=_personMana.say("张三")print(ce)ce = _personMana.sayTest("你好","张三")print(ce)

运行结果如下

三、具体代码连接如下:

python文件批量生成pyd文件源码资源-CSDN文库


http://www.mrgr.cn/news/10090.html

相关文章:

  • [从0开始AIGC][LLM]:LLM中Encoder-Only or Decoder-Only?为什么主流LLM是Decoder-Only?
  • 机械学习—零基础学习日志(如何理解概率论8)
  • 【SQL】直属部门
  • 四,接口类型和网络协议
  • Python实现核主成分分析(KPCA)降维算法
  • ASAM OpenX系列标准
  • 【多线程】如何保证多线程数据的安全性
  • 【数据结构5】二叉搜索树(插入、查询、删除)
  • 速盾的高防 IP 和 CDN 服务有哪些优势?
  • 除猫毛空气净化器什么牌子好?除猫毛宠物空气净化器测评推荐
  • iPhone13手机照片被误删,有什么方法可以恢复吗?
  • 车企重新审视「自研」
  • Python中的二进制数据处理:`struct` 与 `cffi` 的比较
  • vue3上传excel并在线预览
  • Ant Design Vue 快速上手指南与常见问题排查
  • 武汉流星汇聚:亚马逊热门品类揭秘,中国卖家如何布局海外电商
  • Day16_Zookeeper
  • 表设计-----三大范式
  • 深入理解WebSocket:从基础到实践
  • TypeSript8 泛型学习