Python作为解释型语言,发布即公开源码,虽然是提倡开源但是有些时候就是忍不住想打包成exe,不仅仅是为了对代码进行加密,而是为了跨平台。防止有些没有安装py环境的电脑无法运行软件。
目录对python代码打包成exe的方式有4种,py2exe,pyinstaller,cx_Freeze,nuitka,分别对以上4种方法介绍,欢迎纠错和提供新的办法。
py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序。
优点:
打包好的 exe只能在相同的系统下运行,比如你在XP系统用py2exe打包好的exe只能在XP上运行,在win7上肯定有问题,而且也是存在在别的XP机子上也可能不能运行,因为一些别的机子可能会缺少dll文件什么的,作者我当时之所以抛弃py2exe 也是因为这个原因;
打包的文件也需要打包同exe下的dll,和一些库的压缩包,不然exe根本跑不起来
打包时候报始终报RuntimeError: BeginUpdateResource错误,就需要拷贝dll文件。C:WINDOWSsystem32python27.dll复制到dist目录
总之毛病一大堆,基本上已经舍弃了
下载地址
安装好后,准备进行打包
准备一个文件x.py,这个x.py就是想要打包成exe。
然后这x.py同目录下新建一个setup.py,内容如下:
PyInstaller除了win32平台外还支持Linux,Unix平台.py2exe的用法在前面的博文里已经有了,现在看看PyInstaller,pyinstaller是目前应用最多的python打包工具,也是我最常用的。
PyInstaller本身并不是Python模块,所以安装时随便放在哪儿都行。
pyinstaller是很智能的,只要指定了入口py文件,那么它就会根据代码自动查找需要导入的包。但是隐式导入的话,平常运行是没有问题的,举例:
那么我们开始打包,使用最简单的pyinstaller test1.py。打包完成后,在当前目录下有个dist文件夹,进入dist下的test1文件夹,然后打开cmd,运行这个exe,我们就会发现:
提示: no model named ‘pymysql’
这是怎么回事呢?那么问题来了,sqlalchemy这个库在初始化的时候是不需要显示导入引擎库的,它自己有一个create_engine()的函数来初始化,这个字符串是使用者根据规则来自己填写的。其实解决的方法很简单,我们只要在显式导入pymysql这个库即可。现在我们导入这个库:
官方的CPython存在一个GIL锁,这个锁的存在有很多优点,很多库都是线程安全的,单线程执行的效率也高。在python早期的一个版本中取消掉了GIL,代之以高粒度的锁来实现多线程,但是实际应用中单个线程的效率大大降低。故后来又将GIL这个锁还原回去,所以至今的python2也好还是python3中都会有这个锁。但是这个锁有很大一个问题,那就是效率问题,它导致了python仅仅只能利用一个core来进行数据的计算。所以后面为了弥补这个GIL带来的问题,专家们设计了multiprocessing库,gevent库等。前一个是多进程库,为了解决python用于数据密集型处理的情况;后一个用于异步IO处理的情况,基本原理就是在CPU时钟之间来回切换,简单的例子就是爬虫程序爬取网页的时候。假如有10个url,我们都要去GET它,实际上网络之间的延迟是大大高于计算机内部的,那么这个时间内计算机就切换到下一个。
有时候运用多进程是必须的,这个替代不了,哪怕它占用资源很多。
安装:
-D与-F一一对应,-F是打包成一个单独的文件。最后一排加上–noconsole,就是无窗口运行。
如果py程序是多进程的话,使用pyinstaller打包会出现错误,这个时候只要加上一行代码
即可
有的时候你加上图片后打包会出错,这是因为图标里面的格式出错了,需要用图片编辑软件重新对图片内部大小进行设置,这个百度一下吧~
如果要加密混淆代码(其实没有用,一样可以反编译出你的源代码,但是聊胜于无吧)
加上一行 --key=asfweakjhfksafkasdkdbas随便几个字符串
好像要安装依赖包,根据提示安装即可
python中比较常用的python转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller。py2exe恐怕是三者里面知名度最高的一个,但是同时相对来说它的打包质量恐怕也是最差的一个。pyinstaller打包很好,但是操作工序较为复杂,推荐cx_freeze,可以通过pip install cx-freeze 安装。–这是别人的描述,其实我觉得pyinstaller其实挺简单的
安装方法:
在cxfreeze的安装目录下即Python34Scripts,添加一个文件cxfreeze.bat(可用记事本)cxfreeze.bat内容如下:
打包方法
打包文件时要在Scripts文件夹路径下操作,文件的路径最好是绝对路径。例如:将 G 盘的 hello.py 打包到 G 盘的 123文件夹下:cxfreeze g:hello.py --taget-dir g:123 或者 cxfreeze g:hello.py --taget-dir g:123 --base-name=Win32GUI。加上–base-name=Win32GUI可以在运行exe时去掉cmd黑框。
具体操作:
首先在命令提示符中使用cd命令转换到所需要转换的python文件的目录中,因为转换后的dist文件夹会出现在命令提示符的当前目录中
然后输入:
cxfreeze --init-script=C:Users angcDesktopalien_invasionalien_invasion.py alien_invasion.py
如果原.py程序使用了图片等素材,并且添加图片是相对路径(同一个文件夹下可以不使用绝对路径),打包文件后,需要将图片等素材拷贝一份放在打包后的文件夹下,否则运行.exe程序会找不到图片素材。
如果原.py程序使用图片添加的是绝对路径,在本地电脑上运行时可能不会发现错误。但是你将打包后的文件发给另一台机器,运行.exe程序会报错,大概意思是“根据你写的绝对路径找不到图片等素材”,即使你在文件夹下拷贝了素材,但是绝对路径也是错误的,所以,最好使用上一种方法。
注意:
只能指定一个要打包的模块,也就是启动模块
发布后,可执行文件执行路径不能有中文(最好也不要有空格)
启动执行的文件中不要有下面这种判断,否则可执行文件执行会没有任何效果
Nuitka直接将python编译成C++代码 ,再编译C++代码产生可执行文件,完全不存在反向解析的问题,非常安全,而且由于可执行文件由C++编译而来,运行速度也会获得提升。
但是我在打包中发现了一个文件,那就是在另一台电脑上无法运行…并且实际编译时需要近20分钟,编译的时候cpu持续100%
不过如果只是自己的电脑上运行的话,还是挺好使的
官方文档
注意nuitka对python的某些语法有专门要注意的地方
下载地址
下载完后会提示安装编译c++代码的软件,使用的是gcc
安装好有会有一个MinGW64的文件夹,比如我要打包一个back.py的文件,把这个py文件放在哪个目录下,常用命令如下
到此这篇将py打包成exe(将py文件打包成exe)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/57030.html