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

PyInstaller打包Windows程序报错:No module named 'encodings'求助

解决Windows下PyInstaller打包后exe报错"Py_initialize: unable to load the file system codec"的问题

问题描述

我在Windows系统中使用PyInstaller执行命令pyinstaller __main__.spec打包Python项目后,运行生成的.exe文件时出现以下报错:

Py_initialize: unable to load the file system codec ModuleNotFoundError: No module named 'encondings'

项目运行时一切正常,Linux系统中打包也没问题,且已经在__main__.spec文件中添加了hiddenimports=['encodings'],但问题仍未解决。我的__main__.spec内容如下:

# -*- mode: python -*-
block_cipher = None

a = Analysis(['__main__.py'],
             pathex=['C:\Users\user\PycharmProjects\l_concept'],
             binaries=[],
             datas=[],
             hiddenimports=['encodings'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
exclude_binaries=False, name='__main__', debug=False, strip=False, upx=True, console=True )
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          Tree('C:\Users\user\PycharmProjects\l_concept\providers', prefix='providers'),
          Tree('C:\Users\user\PycharmProjects\l_concept\utils', prefix='utils'),
          exclude_binaries=False,
          name='__main__',
          debug=False,
          strip=False,
          upx=True,
          console=True )

coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='__main__')

解决方案

结合我自己的踩坑经验,给你几个针对性的解决方向:

  • 修复路径转义问题:Windows路径中的反斜杠\在Python字符串中会被解析为转义字符(比如\U会被当成Unicode转义),导致PyInstaller无法正确识别路径。你需要把spec里的所有路径改成双反斜杠或者原始字符串:
    比如把pathex=['C:\Users\user\PycharmProjects\l_concept']改成pathex=[r'C:\Users\user\PycharmProjects\l_concept'](前面加r表示原始字符串),或者pathex=['C:\\Users\\user\\PycharmProjects\\l_concept']。Tree的路径也要做同样修改:

    Tree(r'C:\Users\user\PycharmProjects\l_concept\providers', prefix='providers'),
    Tree(r'C:\Users\user\PycharmProjects\l_concept\utils', prefix='utils')
    

    这个是Windows下PyInstaller打包最常见的坑之一,很多模块缺失问题都是路径解析错误导致的。

  • 修复spec文件的语法错误:你的spec里有一行明显的语法错误——在Analysis定义的末尾多了一个多余的右括号,导致后续参数解析混乱:

    # 原代码中错误的行:
    exclude_binaries=False, name='__main__', debug=False, strip=False, upx=True, console=True )
    

    这部分参数应该属于后续EXE的配置,需要把这个多余的右括号删除,否则PyInstaller解析spec时会出错,导致打包不完整。

  • 禁用UPX压缩:有时候UPX压缩会破坏Python核心模块的文件结构,导致运行时无法加载encodings。你可以把spec里所有的upx=True改成upx=False,然后重新打包试试。

  • 升级PyInstaller版本:旧版本的PyInstaller在Windows下对核心模块的处理可能存在兼容性bug,执行pip install --upgrade pyinstaller升级到最新稳定版,再重新打包。

  • 手动添加encodings模块到datas:如果上面的方法都没效果,可以尝试手动把Python安装目录下的encodings文件夹添加到datas中,确保打包时被完整包含:

    # 替换成你的Python实际安装路径
    datas=[(r'C:\Python39\Lib\encodings', 'encodings')]
    

验证步骤

修改完spec后,先删除之前生成的build和dist文件夹,然后重新执行pyinstaller __main__.spec,打包完成后运行dist目录下的exe文件,检查是否解决问题。

内容的提问来源于stack exchange,提问作者João Costa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:22:25