这里写自定义目录标题
1.pyinstaller介绍
PyInstaller 是一个将 Python 程序转换为独立可执行文件的工具。它能够在 Windows、Linux、Mac OS X、AIX 和 Solaris 等多种系统上运行。详细介绍可参考pyinstaller官网:https://www.pyinstaller.org
PyInstaller 主要优点:
1. PyInstaller 与任何 Python 版本兼容,从 2.3 版本开始支持。
2. PyInstaller 通过透明压缩功能,使生成的可执行文件更小。
3. PyInstaller 是完全跨平台的,可以在各种操作系统上运行。
4. PyInstaller 利用操作系统的支持来加载动态库,从而确保了完全的兼容性。
5. PyInstaller 较其他工具打包速度较快
2.下载pyinstaller
1.pip install pyinstaller,若速度慢,可以使用镜像源进行安装,例如清华镜像源安装pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
2.版本查看:pyinstaller --version
3.pyinstaller 其他命令及打包参数理解
#打包命令
pyinstaller 构建一个捆绑的应用程序的主命令
pyi-makespec 创建一个 spec 配置文件
pyi-archive_viewer 检查捆绑的应用程序
pyi-bindepend 显示可执行文件的依赖关系
pyi-grab_version 从 Windows 可执行文件中提取版本资源
pyi-set_version 将先前提取的版本资源应用到现有的 Windows 可执行文件中
#打包参数,常用命令参数
-F, --onefile:打包一个单个文件,产生一个文件用于部署。
-D, --onedir:打包多个文件,产生一个目录用于部署。
-K, --tk:在部署时包含 TCL / TK。
-a, --ascii:不包含编码,在支持 Unicode 的 python 版本上默认包含所有的编码。
-d, --debug:产生 debug 版本的可执行文件。
-w, --windowed, --noconsole:使用 Windows 子系统执行,当程序启动的时候不会打开命令行(只对 Windows 有效)。
-c, --nowindowed, --console:使用控制台子系统执行(默认),当程序启动的时候会打开命令行(只对 Windows 有效)。
-i, --icon=<file.ico>:将 file.ico 添加为可执行文件的资源,改变程序的图标(只对 Windows 系统有效)
4.pyinstaller打包项目流程
4.1项目架构
目录详情
--obtain
--untils
tools.py
datasets.py
main.py
4.2通过pyi-makespec生成main.spec
1.首先在根目录obtain下打开cmd,然后切换带有pyinstaller的环境:conda activate env-name
2。接着输入pyi-makespec main.py,会看到在main.py的同级目录下生成main.spec
4.3改变main.spec
#1. 首先了解main.spec的参数意义,main.spec具体内容如下所示
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main',
)
#2.修改main.spec参数,打包整个项目
一般需要修改的是a 和 exe 中的内容:
Analysis参数:
scripts : 也是第一个参数,它是一个脚本列表,可以传入多个py脚本;
pathex :默认有一个spec的目录,当我们的一些模块不在这个路径下,记得把用到的模块的路径添加到这个list变量里;
datas :作用是将本地文件打包时拷贝到目标路径下;
binaries :添加二进制文件,也是一个列表,定义方式与datas参数一样;
hiddenimports :指定脚本中需要隐式导入的模块;
hookspath :指定额外hook文件(可以是py文件)的查找路径,这些文件的作用是在PyInstaller运行时改变一些Python或者其他库原有的函数或者变量的执行逻辑(并不会改变这些库本身的代码);
runtime_hooks :指定自定义的运行时hook文件路径(可以是py文件);
excludes :指定可以被忽略的可选的模块或包。
exe参数:
console :设置是否显示命令行窗口,同命令-w/-c。
icon :设置程序图标,默认spec是没有的,需要手动添加,参数值就是图片路径的字符串。同命令“命令-i/–icon”。
下面是修改后的内容,凡是有“修改”字样均要修改
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py','untils/tools.py'], #修改:需要打包的.py文件
pathex=['D:\ProgramData\anaconda3\envs\ML\Lib\site-packages'], #修改:添加环境路径
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main',
)
4.4通过pyinstaller进行打包,生成.exe
1.输入pyinstaller main.spec #打包命令 注意:在main.spec层目录执行命令
成功后python项目生成两个目录(build 和 dist),build是缓存文件,可以删除掉。dist 中就是打包的结果,在该目录下有生成的 exe 文件(如果非单个 exe 文件还会包含所依赖的库文件)
dist 文件夹是 PyInstaller 生成的打包文件的存放位置,其中包含与源程序同名的文件夹,以及可执行文件的动态链接库等。这个文件夹中的内容可以直接运行,其他人可以使用这个文件夹里的可执行文件。
build 文件夹是 PyInstaller 存储临时文件的目录,类似于 PyInstaller 的工作空间,其中包含相关的文件和日志信息。打包完成后,这个文件夹可以安全删除。
至此使用pyinstaller打包python项目完成