You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包含子文件夹Python代码报错,是否无法实现?

PyInstaller完全能包含存放Python代码的子文件夹!

当然不是啦!PyInstaller完全支持打包包含Python代码的子文件夹,你遇到的报错大概率是打包配置没调整到位而已,咱一步步来解决:

先确认基础前提

首先要保证你的子文件夹是Python包——也就是里面必须有一个__init__.py文件(哪怕是空的都行),这样PyInstaller才能识别到它是一个可导入的模块集合。

两种解决方式,按需选择

1. 直接用命令行打包

如果你的项目结构是这样的:

main.py
my_code_folder/
    __init__.py
    utils.py
    config.py
  • 如果PyInstaller能自动识别子文件夹模块,直接运行:
    pyinstaller --onefile main.py
    
  • 如果自动识别失败(比如运行exe提示找不到模块),就用--hidden-import参数手动指定要包含的模块:
    # 单个模块
    pyinstaller --onefile --hidden-import my_code_folder.utils main.py
    # 或者直接指定整个包
    pyinstaller --onefile --hidden-import my_code_folder main.py
    

2. 修改你的Spec文件(更灵活,推荐)

既然你已经在用spec文件打包,那直接调整里面的参数就行:
打开你的spec文件,找到Analysis部分的hiddenimports和datas(如果有非代码资源的话):

a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    # 如果子文件夹里有非Python文件(比如配置文件、图片),用datas指定打包路径
    datas=[('my_code_folder/*.ini', 'my_code_folder')],
    # 把你子文件夹里的模块或整个包加进hiddenimports
    hiddenimports=['my_code_folder', 'my_code_folder.utils', 'my_code_folder.config'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)

修改完后,运行pyinstaller your_file.spec重新打包就行。

额外注意点

  • 如果你在代码里用了相对导入(比如from .utils import xxx),打包时可能会出现路径问题,建议改成绝对导入(from my_code_folder.utils import xxx)会更稳妥。
  • 要是还是报错,可以打开PyInstaller的日志(加--log-level DEBUG参数),看看具体是哪个模块没被打包进去,再针对性添加到hiddenimports里。

内容的提问来源于stack exchange,提问作者user5989986

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:54:11