到目前为止,把Python源程序文件打包为.pyd文件,是最简单有效的源码保护方式之一。 操作步骤: 1、编程Python程序,内容如下: 2、安装扩展库easycython。 生成的主要文件如下: 5、删除文件test.c、test.html、test.py和文件夹build,把文件test.cp39-win_amd64.pyd改名为test.pyd,然后启动IDLE,导入
去网站:http://www.dependencywalker.com/ 下载程序后,file>打开对应的dll或者pyd即可 Dependency Walker是一个免费的实用程序,可以扫描任何32
pyd 特点及生成方式 我们知道 windows 系统有许多 DLL 后缀的文件,即动态链接库,在运行时链接到调用程序。 pyd 这个 d 就是取自于 DLL,只能运行在 windows 系统上。 文件,自动生成的名字并不是 demo.pyd,而是 demo.cp36-win_amd64.pyd 这个 cp36 和 win_amd64 视 python 版本和操作系统而定。 我们需要把它改成 demo.pyd,注意,是只能改成 demo.pyd;改成其他任何名字都不行,使用时会 import error。 但是 pyd 就没有这种问题~ 如不足之处欢迎批评指正~
很可能是cmake时候没有正确配置,通过搜python关键词发现没有BUILD_opencv_python3选项
pyc文件python -m py_compile hello.py文件结构:位于__pycache__目录命名格式:hello.cpython-39.pyc包含Python字节码,不是机器码3. .pyd - Windows动态链接库.pyd文件本质上是DLL文件,但可以被Python直接导入。 import cythonizesetup(ext_modules=cythonize("hello.pyx"))# 编译生成.pydpython setup.py build_ext --inplace使用.pyd 在某些场景下,编译成.pyd可以显著提升性能:# 性能测试示例import timeit# Python版本def python_fib(n): if n <= 1: return n return python_fib(n-1) + python_fib(n-2)# Cython编译版本(假设已编译为.pyd)from cython_fib import cython_fib
如果要想把自己使用python写的程序发送给别人,但又不想让对方看到源码,可以打包成exe程序,但是最安全的应该是将py源文件编译一下,生成为二进制文件,后缀名为pyd; 以上针对windows。 /usr/bin/env python # -*- coding: utf-8 -*- # cython: language_level=3 ''' 加密py代码,变成pyd文件 ''' def limitTime pyd文件和html文件 html文件内容如下: 以上文件,只需要保留pyd文件即可;其他的文件都可以删除了 使用编译后的pyd文件: 使用pyd文件和释义py文件是一样的,在需要的时候直接导入模块即可
pyd 文件.pyd 文件是非 Python,由其它编程语言 "编写-编译" 生成的 Python 扩展模块。 Python 要导入 .pyd 文件,实际上是在 .pyd 文件中封装了一个 module。 在 python 中使用时,把它当成 module 来用就可以了,即:"import 路径名.modulename" 即可,路径名为 .pyd 文件所在的路径。 PyWin32 项目分发包中,也存在很多 MicroSoft Windows OS 相应 .dll 文件的中间 .pyd 文件。 Cython 可将个人基于 Python 语言编写的 Python 模块编译成具有 C 语言特性的 .pyd 文件。.pyd 文件有时也是用 D 语言按照一定格式编写,编译生成的二进制文件。
pyd文件.pyd 文件是非 Python,由其它编程语言 "编写-编译" 生成的 Python 扩展模块。Python 要导入 .pyd 文件,实际上是在 .pyd 文件中封装了一个 module。 在 python 中使用时,把它当成 module 来用就可以了,即:"import 路径名.modulename" 即可,路径名为 .pyd 文件所在的路径。 基于 Qt/C++ 的 PyQt、PySide GUI (图形用户界面) 开发框架绑定,会为每个 Qt/C++ 库 .dll 文件生成一个中间 .pyd 文件。 PyWin32 项目分发包中,也存在很多 MicroSoft Windows OS 相应 .dll 文件的中间 .pyd 文件。 Cython 可将个人基于 Python 语言编写的 Python 模块编译成具有 C 语言特性的 .pyd 文件。
注意: 只能加密py文件, 如果加密的模块是pyd文件, 则pyd文件会直接打包, 不会被加密. 听说密钥也一并打包到输出文件中了, 所以好像也不安全. 感觉还是pyd靠谱些, 至少差不多是C编译后的文件. 将py文件转为pyd格式 安装easycython模块 pip install easycython 使用easycython命令将py转pyd: easycython xx.py, 会在同一目录生成xx.pyd (如果是64位系统生成的文件名为xx.cp36-win_amd64.pyd); 将xx.cp36-win_amd64.pyd重命名为xx.pyd; 使用pyinstaller打包(由于xx.py和xx.pyd 生成的打包文件中会包含xx.pyd; 注意: 如果打包时使用了—key选项, 但打包的模块是pyd格式的, 则pyd文件不会被加密, 只是打包.
编译的话,只需要需要把获取网络时间的代码,lock 函数的定义及调用 lock 的代码都编译成 pyd,本例子中就是 lock.py 和 core_work.py 编译成 lock.pyd 和 core_work.pyd ,然后把源代码 lock.py 和 core_work.py 删除,其实就可以发布了,想破解只能反编译 pyd 文件,得到的是汇编代码,这个门槛已经拒绝了大多数的人。 pyd 的编译流程是 .py -> .c -> pyd,也就是说 pyd 是从 c 语言编译的,除了隐藏源代码之外,速度也会变快一些。 如何编译 pyd 呢? 然后在 build 文件夹就可以看到编译好的 pyd 文件,然后把他们移动到源代码的位置,重命名为 xxx.pyd 就可以了。 最后的话 以上编程技巧,简单实用,如果有帮助,还请点赞、在看、转发支持。
build_ext --inplace可以看到生成了一些.pyd文件,这是Windows的DLL文件,相对来说破解和反编译都比.pyc文件要难一些,可以达到一定的加密效果。 生成.pyd文件后的目录结构:│ app.c│ app.cp38-win_amd64.pyd│ app.py│ build_pyd.py│ config.c│ config.cp38-win_amd64 .pyd│ config.py│ gui.c│ gui.cp38-win_amd64.pyd│ gui.py│ log.c│ log.cp38-win_amd64.pyd│ log.py│ 文件时,由于.pyd文件是二进制文件,PyInstaller 在分析需要导入的包时无法直接解析.pyd文件。 导致 PyInstaller 不知道.pyd文件中导入了哪些模块。因此,我们需要使用--hidden-import参数告诉 PyInstaller 我们需要导入哪些模块,以便正确地打包应用程序。
常见的 Python 文件后缀有:py、pyc 、pyo、 pyi、pyw、 pyd、 pyx 等。 test_lib.pyd 放在当前目录下 import test_lib out = test_lib.sum(1, 2) print(out) # 3 关于 pyd文件和dll文件的区别,可参考官方文档的说明 : Is a *.pyd file the same as a DLL? C 语言代码和 Python 代码都可以通过一定的方法编译成pyd格式的文件,本人并没有实际使用过pyd文件,详细方法可参考下面的文章: 使用C++创建Pyd文件扩展Python模块 Python源代码保护 (Python文件编译生成pyd/so库文件) pyx Cython 源代码文件。
大家好,又见面了,我是你们的朋友全栈君 由于Python开源的特性,在一些商业场景下,若不想将源码暴露,可通过混淆、编译为pyc或so(Windows下为pyd)文件等方法起到保护源码的效果。 pyc反编译反编译通过uncompyle6,使用如下所示: # 安装 pip install uncompyle6 # 使用 uncompyle6 xxx.pyc 3 so或pyd so(pyd是 import setup from Cython.Build import cythonize setup(ext_modules = cythonize("xxx.py")) # xxxe.py是需要转换pyd build.py build_ext so文件在目录下的build->lib命名开头文件夹中,如下图so文件在build/lib.macosx-10.7-x86_64-3.6中: 4)将so(或pyd )文件直接替换对应的py文件 相对混淆和pyc,so(或pyd)对保护效果最好的一种方案。
5165 WARNING: lib not found: api-ms-win-crt-conio-l1-1-0.dll dependency of c:\python36\DLLs_hashlib.pyd 2018/03/23 13:33 3,291,136 python36.dll 2018/03/23 13:33 16,384 select.pyd 2018 /03/23 13:33 1,150,776 ucrtbase.dll 2018/03/23 13:33 888,832 unicodedata.pyd 2018 /23 13:33 1,114,112 _hashlib.pyd 2018/03/23 13:33 176,640 _lzma.pyd 2018/03/23 13 :33 54,784 _socket.pyd 2018/03/23 13:33 1,452,544 _ssl.pyd 50 个文件 11,358,818
选择2.7中的x86文件夹为的cv2.pyd,pyd文件是一种Python动态模块,可以把他理解为C++中的dll文件,只是改了后缀为pyd。 将cv2.pyd 复制到C:\Python27\lib\site-packages内,就完成了OpenCV的配置,确实比VS配置OpenCV方便很多。
cpython-312\Release\example.cp312-win_amd64.exp 正在生成代码 已完成代码的生成 查看输出文件 可以看到编译完成后,我们在当前目录生成了 .c 源文件和 .pyd 使用 .so 文件和 .pyd 文件 使用和原 .py 文件使用方式一致,但 .pyd 文件名需要和原文件名保持一致。 example.py 则生成的链接文件应该为 example.pyd 拓展 .py .pyc .pyd .so .pyx 的区别 .py 文件 标准的 Python 源代码文件,包含 Python 代码 pyd 文件 Windows 平台上的 Python DLL 文件。它们包含编译后的 Python 模块,通常是用C、C++或其他语言编写的扩展模块。 pyx 文件包含了同时具有 Python 和 C 语法的代码,可以通过 Cython 编译器转换为 C 代码,然后编译成 Python 可执行模块(.pyd 或 .so 文件)。
pyd 之殇 之前发布的这三篇爬虫系列 2021 新版微博话题爬虫发布 2021 新版微博评论及其子评论爬虫发布 2021 微博最新转发爬虫发布 发布的爬虫文件都是 pyd 格式,只能运行在 windows pyc 才是 YYDS 今天研究了下,发现只要转 pyd 为 pyc 格式,就能跨平台运行了。但为什么 pyc 就可以跨平台!不由得感概相见恨晚,pyc 才是 yyds 啊! 预警,下面两段话是将 pyd 和 pyc 原理的,解释为什么 pyc 能跨平台,不感兴趣的同志可以跳过~ 我们知道 windows 系统有许多 DLL 后缀的文件,即动态链接库,在运行时链接到调用程序。 pyd 这个 d 就是取自于 DLL,只能运行在 windows 系统上。 python -m compileall ./ 注意了 好了,理论不多说,只需要打开对应的百度云链接获取最新的 pyc 文件即可,最好删除了原来的 pyd 使用。
最后介绍的是.pyd文件,.pyd文件并不是使用python编写而成,.pyd文件一般是其他语言编写的python扩展模块。 (之前又在网上看到过有关解释,.pyd文件是用D语言按照一定的格式编写,并处理成二进制文件。那么什么是D语言呢??
使用 pyconcrete 加密的源码在运行时会调用 _pyconcrete.pyd 文件进行解密,该文件内存储了用于解密源码的密钥。 编译为 pyd 文件 上面提到的 pyd 文件是 Python 的动态链接库,类似 Windows 下的 DLL 和 Linux 下的 SO,它是 Cython 结合 C 的编译器编译而来,涉及 C 的编译 创建一个 py 文件,用于将 malicious_func.py 编译为 pyd。 python build_pyd.py build_ext --inplace 可以直接运行。 也可以打包为 exe,Pyinstaller 会自动将 pyd 文件作为依赖导入。 编译为 pyd 后,想要了解源码的逻辑就必须通过逆向来分析,相较于从 _pyconcrete.pyd 中提取密钥解密 pye,这种直接将完整逻辑代码编译为二进制文件的方式更不容易被逆向出来,逻辑写的越复杂
python文件的后缀名有:“.py”、“.py3”、“.pyc”、“.pyo”、“.pyd”、“.pyi”、“.pyx”、“.pyz”、“.pywz”、“.rpy”、“.pyde”、“.pyp”、“. 当 Python 执行 import 时会先寻找对应的 pyc或 pyd(dll)文件,如果没有则将对应的py文件编译写入 pyc 文件。 (5).pyd: 这基本上是一个Windows DLL文件。 pyd 一般是 Python 外的其他语言如 C/C++ 编写的 Python 扩展模块,即 Python 的一个动态连接库,与 dll 文件相当。 (11).py [cod]: .gitignore中的通配符表示该文件可能是.pyc,.pyo或.pyd。 (12).rpy: 包含应用程序或框架特定功能的RPython脚本或Python脚本。