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

py2exe打包含python-docx的Python程序时模板文件缺失报错求助

解决py2exe打包python-docx程序时丢失模板文件的问题

问题核心

py2exe默认会将Python库文件打包进library.zip,但python-docx依赖的templates/default.docx属于静态资源文件,不会被自动包含到zip中,导致运行exe时找不到该模板文件。

方案一:正确配置setup.py的data_files

  1. 先找到python-docx的templates目录路径,执行以下代码获取:
import docx
import os
print(os.path.join(os.path.dirname(docx.__file__), 'templates'))
  1. 修改你的setup.py,将templates目录下的文件复制到dist目录对应路径:
from distutils.core import setup
import py2exe
import docx
import os

# 获取docx模板目录的绝对路径
docx_templates_dir = os.path.join(os.path.dirname(docx.__file__), 'templates')
# 配置data_files:目标路径为dist/docx/templates,源文件为模板目录下的default.docx
data_files = [
    ('docx/templates', [os.path.join(docx_templates_dir, 'default.docx')])
]

setup(
    windows=['你的主程序文件名.py'],  # GUI程序用windows,控制台程序替换为console
    data_files=data_files,
    options={
        'py2exe': {
            'packages': ['docx'],
            # 包含python-docx依赖的库,避免运行时缺失
            'includes': ['lxml.etree', 'lxml._elementpath']
        }
    }
)
  1. 执行打包命令:python setup.py py2exe,打包完成后dist目录下会生成docx/templates/default.docx。

方案二:修改代码手动指定模板路径

如果data_files配置仍有问题,可直接在代码中指定模板文件的路径:

  1. 将python-docx的default.docx复制到你的项目根目录(可从之前找到的templates目录中复制)。
  2. 修改代码中创建Document的部分:
from docx import Document
import os

# 获取当前exe所在的目录(打包后自动指向dist目录)
current_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接模板文件路径
template_path = os.path.join(current_dir, 'default.docx')
# 使用指定模板创建文档
doc = Document(template_path)
  1. 在setup.py中添加data_files,将模板文件复制到dist根目录:
data_files = [
    ('.', ['default.docx'])
]

再执行打包命令即可。

方案三:禁止py2exe将docx打包进zip

让py2exe将docx库以文件夹形式保留在dist目录,而非打包进library.zip:
修改setup.py的options配置:

setup(
    windows=['你的主程序文件名.py'],
    data_files=data_files,
    options={
        'py2exe': {
            'packages': ['docx'],
            'zipfile': None,  # 所有库文件会放到dist/library文件夹下
            'includes': ['lxml.etree', 'lxml._elementpath']
        }
    }
)

这样整个docx库文件夹(包含templates)会被完整复制到dist目录,程序运行时可直接找到模板文件。

注意事项

  • 确保打包时激活了正确的Python虚拟环境(如果使用的话),避免依赖路径错误。
  • 打包完成后,必须在dist目录下运行exe文件,不要直接在PyCharm中运行打包后的exe。
  • 如果程序还依赖其他静态资源(如数据文件),需在data_files中一并配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 13:45:27