我正试图在使用包docxtpl和自制docx模板的python代码上使用pyinstaller制作一个可执行文件.exe。
我将Windows 10与conda 4.8.2和python 3.7.6 一起使用
上下文是一个通过填充docx模板自动生成报告的程序。当程序不是可执行文件时,它工作得很好,我也设法生成了一个可执行文件。执行可执行文件时会出现问题。
我收到这个错误消息:
docx.opc.exceptions.PackageNotFoundError: Package not found at
C:UsersusernameAppDataLocalTemp_MEI100562mytoolsrcreport_templateReportTemplate.docx
在规范文件中,我使用了以下数据:
datas=[('C:\Users\username\eclipse-workspace\different_stuff\allmytools\mytool\src\report_template','ReportTemplate.docx')]
程序内部:
from docxtpl import DocxTemplate, InlineImage
from docx.shared import Mm
[...]
self.template_dir = join(dirname(dirname(__file__)), 'report_template')
self.template_name = "ReportTemplate.docx"
self.doc = DocxTemplate(join(self.template_dir, self.template_name))
如果有人能告诉我如何将我的docx模板集成到可执行文件中,使其发挥作用,我将不胜感激。
显然有人也遇到过同样的问题,但我没有找到令人满意的解决方案:https://github.com/elapouya/python-docx-template/issues/35
好的,我已经解决了我的问题:在规范文件中,数据列表定义错误。首先,我的规范文件在文件夹中:
'C:\Users\username\eclipse-workspace\different_stuff\allmytools\mytool\'
因此,在我的规范文件中,我改为:
datas=[('./src/report_template/*','mytool/src/report_template')]
元组的第二部分表示要在exe创建的临时文件夹的哪个部分中找到文件,还表示在exe二进制内部的结构中复制文件的内容和位置