当前位置: 首页 > 后端技术 > Python

Python程序打包

时间:2023-03-26 16:56:21 Python

Python程序打包Python社区文化提倡开源和复用,因此Python程序大多以包的形式发布在PyPI等包管理网站上,用户默认已经拥有Python运行环境。只需要借助pip等工具,直接下载安装即可使用。作为公司或者个人开发者,我们不能指望我们的目标用户环境已经安装了Python环境。此外,我们不希望别人看到我们编写的代码。在这种情况下,我们有两个核心诉求。Python程序可以像窗口中的exe一样打包成一个独立的程序。程序可以加密或编译成二进制代码,而不是像pyc那样的字节码,以防止原始代码被轻易破译。打包成exe程序目前都是打包成exe可执行文件,比较成熟的方案有py2exe和cx_freeze。这两种方案的操作基本相同,写好setup.py并执行即可。官方文档比较详细,其他参考资料网上也很容易找到,这里就不赘述了。在这种情况下,我们可以将可信的Python环境和每个包打包成一份。这时候我们可以将打包好的程序包复制到其他电脑上直接运行,这和其他程序没什么两样。.当然这种方式打包的文件除了依赖库的原生dll之外还会被加载,其他的python代码也会被编译成pyc文件打包成lib添加到我们的目录下。我们都知道pyc文件可以简单的还原为源码,没有技术门槛。要将代码编译成dll或exe,我们还需要其他的方法。Python编译成二进制文件的一般执行过程是python解释器将pyc文件中的指令,即字节码,转换成操作系统的机器码,然后执行。我们想把源码编译成二进制码,这样就跳过了解释器把字节码转成机器码的过程,并没有节省多少时间,但客观上完成了对源码的加密。那么,让我们介绍一下Cython。Cython是python的超集,也就是说你写的python代码会被Cython完全接受,更重要的是你还可以写一些类型确定的代码,暂时丢掉动态语言的属性,在一些模块里出来,编写与C语言速度相当的代码。当然,这不是我们目前关注的重点。我们只知道可以通过Cython将源码编译成pyd文件。所以对于关键代码,或者说你要保护的代码,通过cython编译成pyd,然后以模块的形式调用是一个可行的方案。什么?您想保护所有代码吗?!无论您的代码有多有价值,我们都有另一种解决方案。渣王来了,努伊特卡!这个软件可以帮助我们轻松实现我们要打包哪些源代码,甚至可以让我们将所有的内容集成到一个可执行文件中。用法也极其简单。这里也说明一下,直接访问官网即可。如果爬坑写程序这件事太顺利了,总觉得不真实,所以有坑也是正常的。我的项目使用PyQt5+twisted作为框架。打包后发现程序登录后直接卡住了,界面显示不正确,日志也没有发现异常。翻看资料,从官网上的描述,发现其对PyQt5的支持并不全面,但对PyQt6充满了信心。于是,我花了一天的时间把项目从PyQt5升级到PyQt6。一遍遍的代码修改,顺便让我明白了PyQt5和PyQt6的区别。但是问题并没有消失,于是继续定位,终于发现是QThread的原因!另一篇帖子不小心提到了PySide6,顺便把我用的包从PyQt6转成PySide6,问题解决!PySide6是Qt母公司自己推出的产品,属于自己的儿子,商业用途不受限制。PyQt6是市场上第三方公司推出的产品。如果要商业化,就应该收费,或者商业产品也必须是开源的。折腾了三天,以上就是我的收获。这里之所以不贴出代码或者命令行的细节,是因为不同人的需求并不完全一致,而且官网也有比较详细的说明,最好直接去官方参考。