利用pyinstaller打包Python项目包含多个文件夹

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项目完成

Alt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值