python发布程序源码保护_Python-python打包编译成pyd或者.so,保护代码。

2020-05-20

参考:https://blog.csdn.net/qq_39852676/article/details/99842637

https://blog.csdn.net/qq_39852676/article/details/99745224

https://blog.csdn.net/kdongyi/article/details/102678595

一、首先为什么要使用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):

from setuptools importsetup#from distutils.core import setup

from Cython.Build importcythonize

setup(

name='py2c',#打包文件的名称,默认与py2c.py在同一路径下

ext_modules=cythonize('mytest.py'),

)

或者代码(文件名py2c_2.py):

#-*- coding: utf-8 -*

from distutils.core importsetupfrom Cython.Build importcythonizedefpy2c(file):#返回distutils.extension.Extension对象列表

cpy =cythonize(file)

setup(

name= 'pyd的编译', #包名称

version = "1.0", #包版本号

ext_modules= cpy, #扩展模块

author = "zc",#作者

author_email='xxx@xxx.com' #作者邮箱

)if __name__ == '__main__':

file= "mytest.py"py2c(file)

如何执行:

在命令行执行如下代码:

python py2c.py build_ext --inplace

# 或者

python py2c_2.py build_ext --inplace

这两段代码生成的文件不太一样。

在Windows平台执行结果:

生成如下文件:

在Linux平台执行结果:

生成如下文件:

第一个运行python py2c.py build_ext --inplace的结果

第二个运行python py2c_2.py build_ext --inplace的结果

具体如下:

三、使用pyd/so库文件

在命令行输入:

python

我用的是

python3

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

importmytest

mytest.main()

mytest.test()

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

结果:

————————————————

版权声明:本文为CSDN博主「清晨的光明」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/kdongyi/article/details/102678595

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值