使用pyinstaller将python代码打包成exe文件

2023-12-15 04:47:57

首先使用pyinstaller生成spec文件,然后配置spec文件重新打包

pyinstaller -D app.py

pyinstaller参数

-F :打包单个文件

-D :打包多个文件,在dist中生成很多依赖文件

-c:使用控制台执行,只对windows有效

-n : 生成spec文件的名字和exe名字

-p : 设置导入路径

-key : 用于加密python字节码的密钥

--add-data? 可以将一些非二进制文件添加到exe打包

--dispath? :指定打包后程序的存放目录

--workpath? :输出所有临时文件存放目录,默认存放在build目录

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

block_cipher=None
py_files=['game.py'] #所有的python脚本文件
add_files=[
('resources\\fonts\\MONACO.TTF','resources\\fonts'),
('resources\\images\\game_over.gif','resources\\images')
]

a = Analysis(
    py_files, #此列表存放项目设计所有python脚本文件
    pathex=['E:\Desktop\Games-master\Tetris'],#此列表为项目绝对路径
    binaries=[],
    datas=add_files,  #此列表存放所有资源文件,每个文件都是一个二元组元素
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    cipher=block_cipher,
    noarchive=False,

)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    [],
    exclude_binaries=True,
    name='game',
    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='game',
)


spec配置说明

a: Analysis类的实例,传入各种脚本来分析程序的导入和依赖。a中的内容包括四部分:scripts,python脚本;pure,程序代码文件中的纯Python模块;binaries,程序代码文件中需要的非python模块;datas,非二进制文件

pyz:? 包含所有的python模块

exe:用来生成最后的exe可执行程序

coll:? COLLECT类的实例,用于创建输出目录。-F模式下,没有COLLECT,所有的脚本、模块

二进制文件都包含在最终生成的exe文件中

block_cipher: 加密密钥

Analysis参数说明:

  1. scripts:一个包含要打包的 Python 脚本文件路径的列表。这些脚本文件将被分析并打包到最终的可执行文件中。
  2. pathex:一个包含要搜索脚本文件的路径列表。PyInstaller 将在这些路径中查找脚本文件及其依赖项。
  3. binaries:一个包含要包含在可执行文件中的二进制文件路径的列表。这些二进制文件可以是共享库、插件或其他依赖项。
  4. datas:一个包含要包含在可执行文件中的非 Python 文件路径的列表。这些文件可以是数据文件、配置文件或其他资源文件。
  5. hiddenimports:一个包含要隐式导入的模块名列表。这些模块可能不会被 PyInstaller 自动检测到,但它们对于程序的正常运行可能是必需的。
  6. hookspath:一个包含自定义钩子脚本路径的列表。钩子脚本用于处理特定的包或模块,以便正确地打包它们。
  7. runtime_hooks:一个包含运行时钩子路径的列表。运行时钩子用于在程序运行时执行特定的操作,例如加载插件或初始化资源。
  8. excludes:一个包含要从打包过程中排除的模块名列表。这些模块将不会被包含在最终的可执行文件中。
  9. win_no_prefer_redirects:一个布尔值,指示是否避免使用 Windows 文件重定向。如果设置为 True,则 PyInstaller 将尝试直接访问文件而不是通过重定向来访问它们。
  10. win_private_assemblies:一个布尔值,指示是否将程序集作为私有副本包含在可执行文件中。如果设置为 True,则每个可执行文件都将包含其依赖项的一个私有副本,以避免与其他程序的冲突。
  11. cipher:一个用于加密 Python 字节码的密钥。如果提供了密钥,则 PyInstaller 将使用它来加密打包的 Python 脚本,以增加安全性。
  12. noarchive:一个布尔值,指示是否将 Python 字节码嵌入到可执行文件中。如果设置为 False,则 PyInstaller 将创建一个单独的存档文件来存储字节码,并在运行时加载它。这可以减少可执行文件的大小,但会增加启动时间。

参考:

pyinstaller系列之七:打包各种问题汇总_pyinstaller hidden import not found-CSDN博客

【python第三方库】pyinstaller使用教程及spec资源文件介绍_--hidden-import-CSDN博客

Pyinstaller的Spec文件用法_pyinstaller spec-CSDN博客

文章来源:https://blog.csdn.net/qq_40107571/article/details/135005102
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。