You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将两个关联的Python脚本打包为单个可执行文件(exe)

直接打包多个Python文件为单个EXE的可行方案

当然可以直接把多个关联的Python脚本打包成单个EXE文件,完全不用先手动合并代码!下面是几个工业界常用的靠谱方案,一步步教你操作:

1. 使用PyInstaller(最推荐,社区支持好)

PyInstaller是目前最流行的Python打包工具,天生支持多文件项目打包成单个EXE,上手门槛低,解决问题的资源也最多。

操作步骤:

  • 先安装PyInstaller:
    pip install pyinstaller
    
  • 假设你的项目结构是这样的:
    my_project/
    ├── main.py  # 项目的主入口脚本
    └── helper.py  # 和主脚本关联的辅助工具脚本
    
  • 打开终端进入项目根目录,执行打包命令:
    pyinstaller --onefile main.py
    
    这里的--onefile参数是核心,它会把你的所有脚本、Python解释器、第三方依赖库全部打包成一个单独的EXE文件。
  • 打包完成后,去项目根目录的dist文件夹里找生成的EXE,直接双击就能运行。

踩坑提示:

  • 如果你的辅助脚本里用到了相对路径读取资源(比如配置文件、图片),打包后可能会找不到文件。可以用下面的代码适配打包前后的路径:
    import sys
    import os
    
    def get_resource_path(relative_path):
        try:
            # 打包后程序运行的临时目录
            base_path = sys._MEIPASS
        except Exception:
            # 未打包时的项目根目录
            base_path = os.path.abspath(".")
        return os.path.join(base_path, relative_path)
    
  • 少数特殊的第三方库(比如带C扩展的)可能不会被自动检测到,这时可以用--hidden-import手动指定:
    pyinstaller --onefile --hidden-import=some_hidden_module main.py
    

2. 使用cx_Freeze(老牌工具,跨平台稳定)

cx_Freeze是个老牌打包工具,稳定性不错,跨平台支持也很完善,适合一些对兼容性要求高的项目。

操作步骤:

  • 先安装cx_Freeze:
    pip install cx_Freeze
    
  • 在项目根目录创建一个setup.py配置文件,内容如下:
    import sys
    from cx_Freeze import setup, Executable
    
    # 指定主入口脚本
    main_script = "main.py"
    
    # Windows下GUI程序需要指定base,控制台程序可以去掉
    base = "Win32GUI" if sys.platform == "win32" else None
    
    executables = [Executable(main_script, base=base)]
    
    setup(
        name="MyMultiScriptApp",
        version="1.0",
        description="My app built from multiple Python scripts",
        executables=executables,
        options={
            "build_exe": {
                "packages": ["os", "sys"],  # 手动指定需要打包的依赖库
                "include_files": []  # 有额外资源文件的话,在这里添加路径
            }
        }
    )
    
  • 执行打包命令:
    python setup.py build
    
  • 如果想要单个EXE文件(cx_Freeze 6.0+版本支持),可以加参数:
    python setup.py build --single-file
    
  • 生成的EXE在build文件夹的子目录里。

3. 使用Nuitka(编译型打包,性能&安全性拉满)

Nuitka和前面两个工具不一样,它会把Python代码编译成C代码再打包,生成的EXE运行速度更快,也更难被反编译,适合对性能或代码保护有要求的场景。

操作步骤:

  • 安装Nuitka:
    pip install nuitka
    
  • 执行打包命令,直接指定主脚本即可,它会自动识别并打包所有关联的脚本:
    python -m nuitka --standalone --onefile main.py
    
    • --standalone:生成完全独立的可执行文件
    • --onefile:打包成单个EXE

优势:

  • 运行速度比PyInstaller打包的程序快不少
  • 代码反编译难度高,适合商业项目

总结一下,PyInstaller是大多数场景的首选,操作简单问题易查;追求性能或代码保护选Nuitka;对跨平台兼容性有特殊需求可以试试cx_Freeze。

内容的提问来源于stack exchange,提问作者Venkata Ramana Reddy

火山引擎 最新活动