大家好,欢迎来到IT知识分享网。
Python社区文化崇尚开源,复用,所以Python程序多以包的形式发布在PyPI这样的包管理网站上,而使用者默认已经具备了Python的运行环境,这时只需要使用pip这类的工具,直接下载安装即可使用。
作为一个公司或者个人开发者,我们不能指望我们的目标用户环境已经安装了Python环境,更进一步,我们并不想我们写的代码被其他人看到。在这种情况下我们就有了两个核心诉求。
- Python程序可以打包成像window中的exe这样的独立运行的程序。
- 程序可以加密或者编译成二进制码,而不是pyc这样的字节码,以防止被轻松反译出原码。
打包成exe程序
目前打包成exe可执行文件,比较成熟的方案包括py2exe和cx_freeze。这两种方案的操作基本大同小异,写好setup.py,然后执行即可。官方文档比较详细,也可以在网络上轻松找到其他参考资料,在此不再细说。这种情况下,我们可以把程序运行信赖的Python环境和各个package都打包成一份,这个时候,我们就可以将打包出来的包复制到其他的电脑直接运行了,与其他的程序并没有什么区别。
当然,这样打包出来的文件,除了依赖库原生是dll的,会被加载进来,其他的python代码,则会被编译成pyc文件打包成lib添加到我们的目录当中。我们都知道pyc文件是可以被简单还原成源码的,并不存在什么技术门槛,要想将代码编译生成dll或者exe,我们还需要其他办法。
编译成二进制文件
Python的一般的执行过程,是python解释器将pyc文件中的指令,即字节码转换成操作系统的机器码,然后再进行执行。我们想将源码编译成二进制码,这就跳过了解释器的将字节码转换成机器码的过程,这并没有省略多少时间,但客观上完成了源码的加密。那么,我们就来介绍一下Cython。
Cython是python的超集,也就是说,你写的python代码将完全可以被Cython接受,更重要的是,你还可以写一些类型确定的代码,暂时抛下动态的语言属性,在某些模块出,写出比拟C语言速度的代码。当然,这不是我们当前关注的重点,我们只知道,通过Cython我们可以将源码编译成pyd文件就可以了。
所以,对于重点代码,或者你想保护的代码,将其通过cython编译成pyd,然后以模块的形式来加以调用就是可行的方案了。什么?你想保护所有代码?!不管你的代码是不是那么值钱,我们还有另外一个解决方案。
王炸登场,Nuitka!这个软件可以帮我们轻松实现,我们想将哪些源码进行打包,甚至允许我们将所有的内容将整合到一个可执行文件当中,用法也是极其简单的,在这里也做说明,直接访问官网即可。
爬坑
写程序这件事,如果太顺利,总感觉不真实,所以,有坑才是常态。我的项目使用PyQt5+twisted作为框架,在打包后,发现程序登录后直接就卡死了,界面也没有正确显示,而且在日志中也没有发现什么异常。再回头查资料,从官网的说明中,发现其对PyQt5的支持并不全面,而对PyQt6就信心满满了。所以,我了一天时间将工程从PyQt5升级到了PyQt6, 一通的代码修改,顺便让我了解了一下PyQt5与PyQt6的不同之处。但问题并没有消失,于是继续定位,最终发现是QThread的原因!而另一篇帖子则无意中提到了PySide6,我顺便就抱着试试看的心情将使用的包从PyQt6转换成了PySide6,问题解决!
- PySide6是Qt的母公司自己推出的产品,属于亲儿子,而且在商业使用中不受限制。
- PyQt6是第三方公司在市场推出的一个产品,如果要商用,应该是要收费的,或者商用的产品也必须进行开源。
前后折腾了三天的时间,以上就是自己的所得。之所以没有将代码或者命令行细节贴在这里,是因为不同的人的需求并不完全一致,而官方网站也有更详细的说明,还是直接去官方参考最佳。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/31406.html