首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【实战揭秘】从源码到EXE:复杂Python项目的“完美”打包指南

【实战揭秘】从源码到EXE:复杂Python项目的“完美”打包指南

作者头像
用户11298163
发布2026-04-14 20:42:57
发布2026-04-14 20:42:57
130
举报

上次分享了一键打包Python程序为exe的方法后,很多小伙伴后台咨询问:这种简单的程序只需要一行命令就能搞定,但企业里那些带有配置文件、数据库的复杂项目该怎么办?

这不,小编带着企业级的复杂项目来手把手教你啦~😎

项目介绍

先来看看我们这个“麻雀虽小,五脏俱全”的实战项目:怎么样?够复杂了吧😂

image-20251128123824259
image-20251128123824259

以下是项目文件结构:

代码语言:javascript
复制
hello/
├── common/
│   └── common.py        # 数据库操作相关函数
├── media/
│   └── img/
│       └── tubiao.ico   # 程序图标
├── main.py              # 主程序文件
├── config.ini           # 程序配置文件
├── 配置文件.txt          # 数据配置文件,用于自动读取显示内容
├── database.db          # SQLite数据库
└── README.md            # 项目说明文档

这个demo代码虽然简单,但包含了企业项目中最常见的元素:配置文件、数据库、资源文件和模块化代码,是绝佳的打包练习素材!

后台回复“打包”获取完整源码,文章最后提供一键打包方法噢~

项目实战

1、确保项目依赖正常

运行以下命令,创建requirements.txt

代码语言:javascript
复制
pip freeze > requirements.txt
image-20251128124150123
image-20251128124150123

安装所有项目依赖:

代码语言:javascript
复制
pip install -r requirements.txt
image-20251128124229325
image-20251128124229325

2、安装PyInstaller

PyInstaller是Python项目打包成exe的一个第三方模块

代码语言:javascript
复制
pip install pyinstaller
image-20251128124444034
image-20251128124444034

3、创建打包规范文件

3.1、生成spec文件

使用以下命令,生成spec文件(一种PyInstaller配置打包详细参数的文件)

代码语言:javascript
复制
pyinstaller --name hello_world --onefile main.py

参数说明:

  • --onefile:生成单个可执行程序
  • --name hello_world:设置EXE程序名为hello_world
  • main.py:入口执行文件
image-20251128124915040
image-20251128124915040
3.2、 修改spec文件

打开生成的hello_world.spec文件,需要修改以下几个配置:

代码语言:javascript
复制
a = Analysis(
    ['main.py'],                    # 主程序入口文件
    pathex=[os.path.abspath('.')],  # 搜索路径:当前目录的绝对路径
    datas=[                         # 需要打包的额外数据文件
        ('配置文件.txt', '.'),       # 源文件 → 打包后的目标路径
        ('config.ini', '.'),
        ('database.db', '.')
    ],
    hiddenimports=['common.common'], # 隐藏导入(PyInstaller无法自动检测的模块)
)
exe = EXE(
    name='hello_world',             # 生成的可执行文件名称
    console=False,                  # 是否为控制台程序(False不显示黑色终端)
    icon=[r'media\img\tubiao.ico']  # 程序图标文件路径
)

完整hello_world.spec文件:

代码语言:javascript
复制
# -*- mode: python ; coding: utf-8 -*-
import os


a = Analysis(
    ['main.py'],                    # 主程序入口文件
    pathex=[os.path.abspath('.')],  # 搜索路径:当前目录的绝对路径
    binaries=[],                    # 需要包含的二进制文件(DLL、共享库等)
    datas=[                         # 需要打包的额外数据文件
        ('配置文件.txt', '.'),       # 源文件 → 打包后的目标路径
        ('config.ini', '.'),
        ('database.db', '.')
    ],
    hiddenimports=['common.common'], # 隐藏导入(PyInstaller无法自动检测的模块)
    hookspath=[],                   # 自定义hook文件路径
    hooksconfig={},                 # hook配置字典
    runtime_hooks=[],               # 运行时hook脚本
    excludes=[],                    # 要排除的模块
    noarchive=False,                # 是否不创建归档文件
    optimize=0,                     # 优化级别:0=不优化,1=移除assert,2=移除docstrings
)

pyz = PYZ(a.pure)  # 创建包含所有纯Python模块的ZIP归档

exe = EXE(
    pyz,                            # 从PYZ归档获取数据
    a.scripts,                      # 主脚本和依赖脚本
    a.binaries,                     # 二进制文件
    a.datas,                        # 数据文件
    [],                             # 兼容性参数(已弃用)
    name='hello_world',             # 生成的可执行文件名称
    debug=False,                    # 是否包含调试信息
    bootloader_ignore_signals=False, # bootloader是否忽略信号
    strip=False,                    # 是否去除符号信息
    upx=True,                       # 是否使用UPX压缩可执行文件
    upx_exclude=[],                 # UPX压缩排除列表
    runtime_tmpdir=None,            # 运行时临时目录
    console=False,                  # 是否为控制台程序(False不显示黑色终端)
    disable_windowed_traceback=False, # 是否禁用窗口程序的错误回溯
    argv_emulation=False,           # 是否启用参数模拟(主要用于macOS)
    target_arch=None,               # 目标架构
    codesign_identity=None,         # 代码签名标识(macOS)
    entitlements_file=None,         # 权限文件(macOS)
    icon=[r'media\img\tubiao.ico']  # 程序图标文件路径
)

4、打包程序

执行打包命令,也就是我们刚刚修改好的hello_world.spec文件

代码语言:javascript
复制
pyinstaller hello_world.spec
image-20251128125433106
image-20251128125433106

手动复制必要文件!

这是很关键的一步!必须手动将程序运行所需的配置文件手动复制到dist目录下

代码语言:javascript
复制
├── config.ini           # 程序配置文件
├── 配置文件.txt          # 数据配置文件,用于自动读取显示内容
├── database.db          # SQLite数据库
image-20251128125700071
image-20251128125700071

5、运行程序

双击dist目录下的hello_world.exe即可运行

image-20251128125745940
image-20251128125745940

6、终极解决大法---->AI

我们只需要一句话告诉AI:帮我打包这个项目为exe程序

AI辅助打包
AI辅助打包

AI可以自己进行以上的所有操作,甚至帮你编写完整的spec文件配置,AI真成精了🤫

AI生成配置
AI生成配置

当然,但作为开发人员,我们要明白:AI只是工具,真正重要的是理解打包的原理和流程。只有这样,当遇到问题时,我们才能快速定位并解决

你的点赞,是我的最大动力~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大飞记Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目介绍
  • 项目实战
    • 1、确保项目依赖正常
    • 2、安装PyInstaller
    • 3、创建打包规范文件
      • 3.1、生成spec文件
      • 3.2、 修改spec文件
    • 4、打包程序
    • 5、运行程序
  • 6、终极解决大法---->AI
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档