Pylnstaller打包

Pylnstaller可以将py文件打包成单个exe文件,下面具体步骤

这个是我的例子:

一.安装

 pip install pyinstaller

已有可以跳过

二.创建spec文件

打开该文件夹的cmd,然后输入:

pyi-makespec --onefile text.py

这时你的目录会生成一个这个文件

这个可以用vscode或者记事本打开。

这是里面内容:

# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['text.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='text',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

这是里面每一行的作用:

a = Analysis(
    ['text.py'],          # 主程序入口文件(必填)
    pathex=[],            # 模块搜索路径(如自定义库目录)
    binaries=[],          # 二进制依赖(如.dll/.so文件)
    datas=[],             # 非代码资源文件(图片/配置文件等)
    hiddenimports=[],     # 显式声明隐式依赖库(如动态导入的模块)
    hookspath=[],         # 自定义 Hook 脚本路径
    hooksconfig={},       # Hook 配置参数(高级功能)
    runtime_hooks=[],     # 运行时 Hook(影响打包流程)
    excludes=[],          # 排除冗余库(减小体积)
    noarchive=False,      # 是否禁用归档(调试用)
    optimize=0,           # 代码优化级别(0=不优化)
)
exe = EXE(
    pyz,                                  # PYZ归档数据
    a.scripts,                            # 主程序脚本(即Analysis中的入口)
    a.binaries,                           # 二进制依赖(Analysis中定义)
    a.datas,                              # 资源文件(Analysis中定义)
    [],                                   # 空列表(历史遗留参数)
    name='text',                          # 输出文件名(不带后缀)
    debug=False,                          # 是否包含调试信息
    bootloader_ignore_signals=False,      # 是否忽略系统信号(如Ctrl+C)
    strip=False,                          # 是否剥离符号(减小体积,Linux专用)
    upx=True,                             # 是否用UPX压缩(需安装UPX工具)
    upx_exclude=[],                       # 排除UPX压缩的文件(如损坏的DLL)
    runtime_tmpdir=None,                   # 资源解压临时目录(默认系统临时路径)
    console=True,                         # 是否显示控制台窗口(GUI程序设为False)
    disable_windowed_traceback=False,     # 禁用GUI错误弹窗
    argv_emulation=False,                 # macOS专用(模拟命令行参数)
    target_arch=None,                     # 目标架构(如'x86_64')
    codesign_identity=None,               # macOS代码签名标识
    entitlements_file=None,               # macOS权限配置文件
)

很复杂是不是,不过这是个简单的例子,不需要调试那么多东西。

3.修改spec的配置:

如果你的py文件没有引用资源,你可以只调整这个

console=True,

如果你不想你打包好的程序出现cmd,那就改成False,如果想就不用管,直接跳到第四步

像我这个例子,我的py文件引用了资源,所以我打包的时候要加载资源,这时要修改datas里的内容

下面是个例子:

# 将本地 assets 文件夹下所有 .png 文件打包到 exe 的 assets 目录中
datas = [('assets/*.png', 'assets')]

# 将 config.json 文件直接放到 exe 根目录
datas = [('src/config.json', '.')]

# 递归打包 fonts 目录下的所有文件(包括子目录)
datas = [('fonts/**/*', 'fonts')]

根据我的实际情况,我的修改为:

datas=[
        ('font/*', 'font'),
        ('pic/*','pic'),
        ('sound/*','sound'),
    ],

保存

4.打包

直接在命令行中输入:

pyinstaller text.spec

这时,我们的文件夹变成这样

我们要的exe文件就在dist文件夹里,build没有什么用,可以删除

完成,可以正常打开使用

posted @ 2025-03-31 11:07  漫宿骄盛  阅读(68)  评论(0)    收藏  举报