前言
我们开发的python脚本一般都会用到一些第三方包,当别人需要用到我们编写的脚本时,如果我们将脚本文件发给他,他是不能直接运行去用的,他需要安装python解释器,配置相应的环境,这是相当麻烦的。那怎么办呢?我们可以将脚本和解释器打包成exe,再发给别人去使用。
PyInstaller介绍
PyInstaller是一个的打包python的py文件的库。
PyInstaller除了win32平台外还支持Linux,Unix平台
PyInstaller本身并不是Python模块,所以安装时放到哪里都可以
优点:
- 可将python文件转成可执行文件
- 跨平台
- 可以选择exe文件的图标 (Windows only)
python脚本是不能脱离python解释器单独运行的,所以在打包的时候,至少会将python解释器和脚本一起打包,同样,为了打包的exe能正常运行,会把我们所有安装的第三方包一并打包到exe。
安装pyinstaller
pip install pyinstaller
使用pyinstaller进行打包
1.我习惯在Anaconda中创建虚拟环境来完成一个个的项目,所以我的PyInstaller库就直接安装在了我要打包的项目的虚拟环境(face)中
2.通过pip命令在虚拟环境中安装好包之后,通过cd命令转移到主文件所在的项目目录中,如cd C:\Users\80621\Desktop\python_learning\recongz
3.我的主文件是run.py
等待打包完成就可以了。
打包完成后项目文件夹中会多一个dist目录,exe文件就在其中
若项目中有文件用到了相对路径,需要把那些用到的文件再拷贝一份放到dist目录下。
查用打包命令
Pyinstaller -F setup.py 打包exe
Pyinstaller -F -w setup.py 不带控制台的打包
Pyinstaller -F -i xx.ico setup.py 指定exe图标打包
Pyinstaller -F -w -i xx.ico setup.py 指定exe图标并且不带控制台的打包
以下问题需要注意!!! 、
1)路径问题
如果你的程序中有图片等资源,是需要根据程序中的相对路径加入到dist文件中,也要在.exe同目录中加入images的文件夹(图片资源)
如果原.py程序使用了图片等素材,并且添加图片是相对路径(同一个文件夹下可以不使用绝对路径),打包文件后,需要将图片等素材拷贝一份放在打包后的文件夹下,否则运行.exe程序会找不到图片素材。
如果原.py程序使用图片添加的是绝对路径,在本地电脑上运行时可能不会发现错误。但是你将打包后的文件发给另一台机器,运行.exe程序会报错,大概意思是“根据你写的绝对路径找不到图片等素材”,即使你在文件夹下拷贝了素材,但是绝对路径也是错误的,所以,最好使用上一种方法。
2)打包的主文件问题
只能指定一个要打包的模块,也就是启动模块
发布后,可执行文件执行路径不能有中文(最好也不要有空格)
启动执行的文件中不要有下面这种判断,否则可执行文件执行会没有任何效果
if __name__=='__main__':
将exe放到其他机子上运行,弹出“找不到msvcr100.dll“ ,手动将”msvcr100.dll“拷贝到dist目录下即可
3)养成良好习惯
写代码的时候应当养成良好的习惯,用什么函数导什么函数,不要上来就import整个库,最后你会发现你一个100KB的代码打包出来有500MB,全是库
文章出处登录后可见!