用python写了一个小程序,考虑到给到windows用户方便使用,就想着打包成exe。于是搜索了下python打包成exe的方法,查阅了一些资料,最终觉得pyinstaller相对比较成熟,于是就先采用pyinstaller了。
因为没有找到比较全面中文新手pyinstaller向导,所以决定写一个。
虽然我写了下面的内容,单依然认为,学习使用一个工具,最好的资料是官方文档。
所以有条件的同学请阅读官方文档
1. 安装
Pyinstaller支持Windows,MacOS,Linux,以及AIX, Solaris, FreeBSD and OpenBSD但是不支持跨平台编译,所以Window运行的程序只能在Windows编译,其他平台也一样。
一般来说
pip install pyinstaller
就够了,当然还可以通过源码安装,下载安装包,或者在Mac上还可以通过其他的包管理工具MacPorts或者Homebrew安装
2. 检查安装
通过命令
pyinstaller --version
如果成功输出版本号,则安装成功了,同时你还可以查看安装路径下,安装成功的可执行文件。(具体细节可以查看官方文档)
3. 安装成功的命令
pyinstaller
pyi-makespec
pyi-archive_viewer
pyi-bindepend
pyi-grab_version
后面四个命令也不常用,安装方式的不一样,可能会导致后面几个命令没有安装上,如果需要,请阅读官方文档Installed commands这一章。
4. 工作原理
最简单的打包方式
pyinstaller hello.py
这行命令后面的做的事情时,Pyintaller先分析hello.py依赖的其他模块和库。然后把所有这些依赖的文件(包括当前的python的解释器)copy到指定的文件夹(如果你制定打包成一个文件的话,最终会打包成一个文件)
最终打包成功的文件,不需要用户安装任何库和依赖,Python也不用装,就可以运行。因为如上面所述,打包的文件中已经包含了所有。
4.1 寻找依赖
Pyinstaller寻找脚本中所有import语句,然后找到这些语句指向的文件中的import,然后再递归。最终找到所有的依赖。
需要注意的是,Pyinstaller只支持通过常规imports引入的依赖,一些其他的方式,pyinstaller是找不到的,例如import(), imp.find_module(), sys.path等。这个时候需要给pyinstaller其他的信息才可以完整依赖分析
- 通过pyinstaller 命令 传入其他文件
- 也可以通过命令传入额外的import 路径
- 也可以修改pyintaller 生成的 hello.spec文件
- 也可以自己写一个hook文件
依赖出错怎么办,如果
4.2 隐藏源码
Python编译后的字节码可以用AES256加密,通过传参
pyinstaller --key '12345678' hello.py
但是AES是对称加密,秘钥就藏在包里,而且按照官方文档的说话,是比较容易找到秘钥的。但是可以一定层面防住小白。
5. 打包
5.1 命令行
命令行输入
pyinstaller hello.py
会在当前目录下生成build和dist文件,dist文件夹下面会有hello文件夹,里面里面包括hello可执行文件以及所有的依赖
1.png
当然如果输入
python --onefile hello.py
得到的就是一个可执行文件,在window上就是exe文件。
[图片上传失败...(image-c5e3df-1612262477240)]
我们还可以传参指定icon,那么打包出来就是一个有icon的应用程序。
还有其他的很多参数,比方说修改打包目标文件夹,运行时是否有命令行,具体请查看官方文档。
5.2 打包脚本
也可以在py脚本中调用PyInstaller.main.run()来执行打包
例如
PyInstaller.__main__.run([
'hello.py'
'--key',
'12345678',
'--onefile',
'--distpath',
'dist/tmp'
])
6. 查看打包
使用上文中提到的命令pyi-archive_viewer 查看打包出来的包,如下:
2.png
7. 跑一个玩玩
了解一个工具最好的方式就是跑起来玩一玩,写一个hello world程序,用pyinstaller打包试试,加上各种参数看看效果,基本用法就掌握了。
网友评论