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

使用py2exe编译Python程序时遇缺失模块及运行报错求助

解决py2exe打包后ModuleNotFoundError: No module named 'encodings'问题

问题分析

你遇到的encodings模块缺失错误,核心原因是bundle_files=0的配置导致Python核心运行时模块未被正确嵌入或打包;编译日志中的13个缺失模块,部分是py2exe的误报,但encodings、os.path这类核心模块需要手动指定包含。另外,distutils已被Python官方弃用,改用setuptools可避免兼容性问题。

解决方案

方案1:单文件打包配置(推荐)

将distutils替换为setuptools,调整打包参数把所有依赖嵌入单个exe,同时显式包含encodings模块:

from setuptools import setup
import py2exe

setup(
    console=['Parser_002.py'],
    options={
        "py2exe": {
            "unbuffered": True,
            "optimize": 2,
            "bundle_files": 1,  # 打包为单个可执行文件
            "zipfile": None,     # 将library.zip内容嵌入exe,消除外部依赖
            "compressed": False,
            "includes": ["encodings", "encodings.*"],  # 强制包含编码核心模块
            "excludes": [],
            "packages": [],
            "dll_excludes": []
        }
    }
)

方案2:多文件打包配置

若需保留多文件结构(bundle_files=0),需显式包含核心模块并排除无用的平台相关模块:

from setuptools import setup
import py2exe

setup(
    console=['Parser_002.py'],
    options={
        "py2exe": {
            "unbuffered": True,
            "optimize": 2,
            "bundle_files": 0,
            "compressed": False,
            "includes": ["encodings", "encodings.*", "os.path"],  # 补充核心缺失模块
            "excludes": ["_posixshmem", "java.lang", "resource"],  # 排除无意义的平台模块
            "packages": [],
            "dll_excludes": []
        }
    }
)

方案3:适配Python版本

py2exe对Python 3.12+支持有限(因distutils被移除),若你使用Python 3.12及以上版本,建议降级到Python 3.11,或切换到PyInstaller等更现代的打包工具。

验证步骤

  1. 删除原有build和dist目录,清除打包缓存
  2. 重新执行打包命令:python setup.py py2exe
  3. 进入dist目录运行生成的Parser_002.exe

关于编译日志的缺失模块说明

日志中的13个缺失模块,多数是平台专属、调试或测试类模块(如_posixshmem、java.lang),不会影响程序运行,可安全排除;但encodings、os.path属于Python核心运行依赖,必须手动指定包含。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:17:40