打包python源码为二进制文件

我们都知道 python 是一门脚本解释性语言,不像 C 语言需要编译执行,有时候,我们需要把自己写好的脚本发给其他人使用,但是对方如果需要执行脚本则首先需要安装环境,安装对应的库,非常麻烦,那么我们能不能把脚本打包成一个二进制文件,其他人直接执行就可以呢?答案是当然可以了。使用 pyinstaller 可以非常轻松的发布你的程序。

原理

PyInstaller 其实就是把 python 解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装 python 和你的脚本依赖的库。在 Linux 操作系统下,它主要用的 binutil 工具包里面的 ldd 和 objdump 命令。

安装 pyinstaller

pip install pyinstaller

编译成二进制文件

pyinstaller -F mycript.py

示例:

有一个 python 脚本,内容就是输出一行hello world。

➜  testbin python hello.py
hello world

执行

pyinstaller -F hello.py

在当前目录下会有一个dist目录,里面的就是可执行文件

 ➜  testbin ls
build      dist       hello.py   hello.spec
➜  testbin cd dist
➜  dist ls
hello
➜  dist ./hello
hello world

注意:只能在和打包机器系统同样的环境下,不同平台需要单独移植,也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。