使用 pyinstaller 打包 python 程序
最近因为工作需要,所以接触到了这个东西,不过因为自己以前很少写 p y t h o n python python,所以被坑了好久。
首先需要明确说明的是,版本问题, p y t h o n 2 python2 python2 与 p y t h o n 3 python3 python3 都有自己对应的 p y i n s t a l l e r pyinstaller pyinstaller 版本。
安装 p y t h o n 3 python3 python3 对应的 p y i n s t a l l e r pyinstaller pyinstaller 比较简单,直接通过 p i p pip pip 就行,可能对网络有点小要求:
pip install pyinstaller
至于 p y t h o n 2 python2 python2 的需要找到 p y i n s t a l l e r 2.1 pyinstaller\ 2.1 pyinstaller 2.1 的源码包进行安装( p y i n s t a l l e r 3 pyinstaller3 pyinstaller3 也可以通过源码安装):
wget https://pypi.python.org/packages/source/P/PyInstaller/PyInstaller-2.1.zip#md5=3eb18a454311707ab7808d881e677329
tar -zxv PyInstaller-2.1.zip
cd Pyinstaller-2.1/Pyinstaller-2.1
python setup.py build
python setup.py install
安装之后,并不能直接打包,需要在源码中导入几个模块,否则可能会报错:
import six
import packaging
import packaging.version
import packaging.specifiers
import packaging.requirements
然后通过命令 pyinstaller [opts] <scriptname> [ <scriptname> ...] | <specfile> \text{pyinstaller [opts] <scriptname> [ <scriptname> ...] | <specfile>} pyinstaller [opts] <scriptname> [ <scriptname> ...] | <specfile> 即可打包。
这里 o p t s opts opts 比较常用的是 − F -F −F,可以将多个文件打包成单个二进制文件,第一个 s c r i p t n a m e scriptname scriptname 是入口程序,后边可以通过 − p -p −p 添加需要打包的 . p y .py .py 文件,通过 − − h i d d e n − i m p o r t --hidden-import −−hidden−import 引入自建模块,注意不能打包资源文件,打包成功后会生成 b u i l d build build 与 d i s t dist dist 目录,二进制可执行文件便在 d i s t dist dist 目录下,将资源文件放置在二进制可执行文件同个目录下即可。 p y i n s t a l l e r pyinstaller pyinstaller 工具打包后会生成一个 . s p e c .spec .spec 文件,不加 | <specfile> \text{| <specfile>} | <specfile> 的话默认与入口程序同名。
E x : Ex: Ex:
pyinstaller -F A.py -p b.py -p c.py --hidden-import b --hidden-import c
这里最后会生成一个 d i s t / A dist/A dist/A 的二进制可执行文件,将资源文件都移动过来以后,双击可直接运行。