一. pyinstaller 简介
Python 是一个脚本语言, 被解释器解释执行. 它的发布方式:
.py 文件: 对于开源项目或者源码没那么重要的, 直接提供源码, 需要使用者自行安装 Python 并且安装依赖的各种库.(Python 官方的各种安装包就是这样做的)
.pyc 文件: 有些公司或个人因为机密或者各种原因, 不愿意源码被运行者看到, 可以使用 pyc 文件发布, pyc 文件是 Python 解释器可以识别的二进制码, 故发布后也是跨平台的, 需要使用者安装相应版本的 Python 和依赖库.
可执行文件: 对于非码农用户或者一些小白用户, 你让他装个 Python 同时还要折腾一堆依赖库, 那简直是个灾难. 对于此类用户, 最简单的方式就是提供一个可执行文件, 只需要把用法告诉 Ta 即可. 比较麻烦的是需要针对不同平台需要打包不同的可执行文件 (Windows,Linux,Mac,...).
本文主要就是介绍最后一种方式,.py 和. pyc 都比较简单, Python 本身就可以搞定. 将 Python 脚本打包成可执行文件有多种方式, 本文重点介绍 PyInstaller,
PyInstaller 的原理简介
PyInstaller 其实就是把 python 解析器和你自己的脚本打包成一个可执行的文件, 和编译成真正的机器码完全是两回事, 所以千万不要指望成打包成一个可执行文件会提高运行效率, 相反可能会降低运行效率, 好处就是在运行者的机器上不用安装 python 和你的脚本依赖的库. 在 Linux 操作系统下, 它主要用的 binutil 工具包里面的 ldd 和 objdump 命令.
PyInstaller 输入你指定的的脚本, 首先分析脚本所依赖的其他脚本, 然后去查找, 复制, 把所有相关的脚本收集起来, 包括 Python 解析器, 然后把这些文件放在一个目录下, 或者打包进一个可执行文件里面.
可以直接发布输出的整个文件夹里面的文件, 或者生成的可执行文件. 你只需要告诉用户, 你的应用 App 是自我包含的, 不需要安装其他包, 或某个版本的 Python, 就可以直接运行了.
需要注意的是, PyInstaller 打包的执行文件, 只能在和打包机器系统同样的环境下. 也就是说, 不具备可移植性, 若需要在不同系统上运行, 就必须针对该平台进行打包.
pyinstaller 将 Python 脚本打包成可执行程序, 使在没有 Python 环境的机器上运行
最新版是 pyinstaller 3.1.1. 支持 python2.7 和 python3.3+.
可运行在 Windows,Mac 和 Linux 操作系统下.
但它不是跨编译的, 也就是说在 Windows 下用 PyInstaller 生成的 exe 只能运行在 Windows 下, 在 Linux 下生成的只能运行在 Linux 下.
二. pyinstaller 在 Windows 下的安装
使用命令 pip install pyinstaller 即可
在 Windows 下, pyinstaller 需要 PyWin32 的支持. 当用 pip 安装 pyinstaller 时未找到 PyWin32, 会自动安装 pypiwin32
三. 打包
打包的 App 里并不包含任何源码, 但将脚本的. pyc 文件打包了.
基本语法:
pyinstaller options myscript.py
常用的可选参数如下:
--onefile 将结果打包成一个可执行文件
--onedir 将所有结果打包到一个文件夹中, 该文件夹包括一个可执行文件和可执行文件执行时需要的依赖文件 (默认)
--paths=DIR 设置导入路径
--distpath=DIR 设置将打包的结果文件放置的路径
--specpath=DIR 设置将 spec 文件放置的路径
--windowed 使用 Windows 子系统执行, 不会打开命令行 (只对 Windows 有效)
--nowindowed 使用控制台子系统执行 (默认)(只对 Windows 有效)
--icon=<FILE.ICO> 将 file.ico 添加为可执行文件的资源 (只对 Windows 有效)
如 pyinstaller --paths="D:\Queena" guess_exe.py
示例: pyinstaller -F wxy_tool.py --distpath=wxy-mtt
四. 小实例 (Windows 下)
pyinstaller --onefile --nowindowed --icon="D:\Queena\PyCharmProjects\dist1\computer_three.ico" guess_exe.py
六. 参考网址:
http://pythonhosted.org/PyInstaller/
报错:
PyInstaller cannot check for assembly dependencies.
Please install PyWin32 or pywin32-ctypes.
则安装
pip install pywin32-ctypes
来源: http://www.bubuko.com/infodetail-3297359.html