你有没有遇到过下面这些情形?

case1:一个远在异地的电脑小白(计算机相关知识量为0的那种人)让你帮他做写个脚本解决某个问题,难点在于,他在异地,你不方便帮他安装Python。

case2:你的python脚本运行的环境是在公司的安全域内的电脑,不能擅自安装python!

解决办法就是——pyinstaller

PyInstaller是一个十分神奇的第三方库,它能够在Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行(包括引用的第三方库),也可以作为一个独立文件方便传递和管理。

简单来说就是:把py格式的python文件打包成exe格式的文件

安装pyinstaller:

1
pip install pyinstaller

使用方法:

-h,–help 查看该模块的帮助信息
-F,-onefile 产生单个的可执行文件
-D,–onedir 产生一个目录(包含多个文件)作为可执行程序
-a,–ascii 不包含 Unicode 字符集支持
-d,–debug 产生 debug 版本的可执行文件
-w,–windowed,–noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,–nowindowed,–console 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,–out=DIR 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,–path=DIR 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,–name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

示例:

app.py内容如下:

1
2
3
4
5
6
7
8
9
10
import turtle
def square(t,n,len):
angle = 360 / n
for i in range(n):
t.fd(len)
t.lt(angle)

bob = turtle.Turtle()
square(bob,360,1)
turtle.mainloop()

运行效果:

img

用pyinstaller打包成exe格式的文件:

img

输出到文件夹:dist

img

img

运行exe文件:

img

Q&A

1.当引入第三放库时,该如何把python程序依赖的第三方库一起打包

Answer:

当引入第三方库时(非python自带库,例如request…),需要将你的python脚本程序复制到你的依赖的第三方库所在的文件夹,然后在第三方库所在的文件夹中运行打包命令

举例:

request库在D:\python36\Lib\site-packages\中

则运行命令:

1
pyinstaller -F D:\\python36\Lib\site-packages\app.py

2.exe运行完后就马上关闭了,没来得及看见运行结果,有没有什么解决办法?

Answer:

在程序末尾加上下面三种语句之一即可:

input()

用法:直接在欲等待处输入input()即可。

优点:不需要借助模块,执行到此处阻塞等待人工输入。

缺点:程序结束时候需要强制结束或者在控制台输入值。

time.sleep()

用法:导入time模块;在欲等待处输入time.sleep(time)(time为数字,表示秒)即可。

优点:动态等待程序执行完毕,不需要强行终止,等待时间可调。

缺点:需要导入模块,等待规定时间结束后便继续往下执行。

os.system(“pause”)

用法:导入os模块;在欲等待处输入os.system(“pause”)即可。

优点:不必强行终止;不必等待时间,可自由按下enter继续。

缺点:导入模块,执行系统命令。