一、首先为什么要使用pyd文件?

我们知道Python是一门解释型语言,当我们想让其他人运行我们的代码时,如果直接将.py源代码发送给他人,那么源代码将没有任何安全性可言,也就是任何一个人都可以打开源代码一看究竟,任何人都可以随意修改源代码。因此当我们想保护我们的源代码(算法保护)或者防止用户篡改源代码时,可以将Python源代码编译生成.pyd库文件或者.so库文件(Windows平台生成pyd文件,Linux生成so文件)。

事实上,Python和Java的解释方式是相同的,只是我们表面上看Python是直接解释源代码,而实际上python解释器只会加载字节码。细心的小伙伴肯定发现了这一点,当我们import某个模块时,总是会在模块所在的目录创建一个__pycache__目录,里面存放着被加载模块的字节码文件。

Python有以下几种类型的文件:

  • py:Python控制台程序的源代码文件
  • pyw:Python带用户界面的源代码文件
  • pyx:Python包源文件
  • pyc:Python字节码文件(可通过逆向编译来得到源码)
  • pyo:Python优化后的字节码文件(可通过逆向编译来得到源码)
  • pyd:在Windows平台上Python的库文件(Python版DLL)
  • so:在Linux平台上是so文件

二、生成pyd/so库文件

代码(文件名py2c.py):

import Cython.Build
import distutils.coredef py2c(file):cpy = Cython.Build.cythonize(file) # 返回distutils.extension.Extension对象列表distutils.core.setup(name = 'pyd的编译', # 包名称version = "1.0",    # 包版本号ext_modules= cpy,     # 扩展模块author = "kdongyi",#作者author_email='kdongyi@163.com'#作者邮箱)if __name__ == '__main__':file = "train_gpu.py"py2c(file)

如何执行:

在命令行执行如下代码:

python py2c.py build_ext --inplace

在Windows平台执行结果:

生成如下文件:

在Linux平台执行结果:

生成如下文件:

三、使用pyd/so库文件

在命令行输入:

python

然后导入我们生成的库文件模块:

import train_gpu
train_gpu.main()

注:train_gpu.main()  其中main()为train_gpu.py中的一个函数。

Python源代码保护(Python文件编译生成pyd/so库文件)相关推荐

  1. python中 .py .pyc .pyw .pyo .pyd各后缀文件区别

    转载自:https://www.cnblogs.com/deadwood-2016/p/8143351.html .py 文件 以 .py 作扩展名的文件是 Python 源代码文件,由 python ...

  2. python创建虚拟环境打包_用虚拟环境保存库文件--Python打包-阿里云开发者社区

    用虚拟环境保存库文件 如果你同时负责多个 Python 项目,或者想要轻松打包某个项目及其关联的库文件,再 或者你担心已安装的库之间可能有冲突,那么你可以安装一个 Python 虚拟环境来分而 治之. ...

  3. 用Python读取轻轻松松背单词的GDS词库文件

    <轻轻松松背单词>是一个广泛使用的背单词软件,有丰富的词库资源.读取轻轻松松背单词GDS词库文件,可以在此基础上开发背单词类软件. #--------------------------- ...

  4. cython,加速python,保护代码(3):扩展文件 .pxd

    http://docs.cython.org/src/tutorial/pure.html .pxd文件相当于c语言中的头文件.h. In addition to the .pyx source fi ...

  5. python导出项目所依赖的所有的库文件以及安装

    python项目包的导入和导出 1.导出 pip freeze > filename.txt # filename.txt 可随意命名 # 同时filename.txt 文件中可自定义编辑,也是 ...

  6. 如何在keil中将文件封装为lib库文件

    1.首先重新打开一份工程文件 2.将不需要封装的文件全部禁止编译(右键--Option For File 'xxxxx.c')或者从工程中移除 V 3.点击"Options For Targ ...

  7. win10 下pycharm+anaconda 编译生成pyd文件

    由于生产部署的问题,需要把用python写的深度学习代码编译为可被调用的文件.上网搜索了下,暂时了解到win10下pyd文件比较流行.下面是直接引用某位博主的结论,个人感觉总结的很好.其中Cython ...

  8. 转:Python源代码编译成 pyc pyo

    [转] Python源代码编译成 pyc pyo 2011-02-28 17:23 [转] Python源代码编译成 pyc pyo 什么是pyc文件 pyc是一种二进制文件,是由py文件经过编译后, ...

  9. 1.Python概述-认识python

    Python 的读音:英[ˈpaɪθən]      美[ˈpaɪθɑːn] Python是一种面向对象.解释性的高级程序语言. 一.计算机语言的发展 这里主要介绍了计算机语言发展的三个阶段,帮助初学 ...

最新文章

  1. LINQ那些事儿(2)- 简单对象的CRUD操作和Association的级联操作
  2. Python中的线程threading.Thread()使用详解
  3. 汇总运行在Hadoop YARN上的开源系统
  4. 使用 JavaScript 实现灵活的固定导航功能
  5. 如何给FormPanel表单中的元素赋值以及获取表单元素值
  6. php提示是否运行,php运行错误提示
  7. 数据线给电脑联网是什么原理_物联网孵化的产物——条码扫描器
  8. 单片机音频信号分析仪
  9. 向量叉乘的几何意义及其模的计算
  10. pkg打包node项目文件
  11. 趋势移动或者移动应用2012
  12. 硅谷之行 (15) Fremont观豪宅
  13. 【信息安全】屁股决定脑袋的COSO内控框架,一篇对COSO的趣评 [转贴]
  14. linux系统下刻录u盘制作启动盘
  15. #ASM 翻译系列第二十五弹:ASM 高级知识 When will my rebalance complete
  16. 电信天翼云搭建Halo博客
  17. 简单的Django系统模板
  18. Eclipse4.2安装FlashBuilder插件
  19. Java---点名---最简
  20. 04.ARM-mini2440-内存管理单元(MMU)

热门文章

  1. php必须知道的300个问题-目录
  2. JD狗东邀新活动余额兑换软件及使用教程
  3. appium 环境搭建配置清单带版本号
  4. 软件工程常见费用参考标准
  5. 美赛经验分享(2020):个人经验/参考文章/资料分享/参赛注意事项/17-19年o奖论文阅读总结分享
  6. RxJava入门指南
  7. kicad 自动生成封装库_kiCAD 从原理图到PCB封装
  8. Hbase思维导图之物理模型
  9. MAC OS 配置JDK环境变量
  10. 【烂笔头】android 左上角三角形 右上角三角形