Как я могу использовать pyinstaller вместе с docxtpl? - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь создать исполняемый файл .exe, используя pyinstaller для python кода, использующего пакет docxtpl, а также самодельные шаблоны docx.

Я использую Windows 10 вместе с conda 4.8. 2 и python 3.7.6

Контекст - это программа, которая автоматически генерирует отчеты, заполняя шаблон docx. Программа работает хорошо, когда это не исполняемый файл, и мне также удается создать исполняемый файл. Проблема возникает, когда я выполняю свой исполняемый файл.

Я получаю это сообщение об ошибке:

docx.opc.exceptions.PackageNotFoundError: Package not found at
C:\Users\username\AppData\Local\Temp\_MEI100562\mytool\src\report_template\ReportTemplate.docx

Где, как в файле spe c, я использовал следующие данные:

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

1 Ответ

1 голос
/ 09 марта 2020

Хорошо. Я решил свою проблему: в файле spe c список данных был определен неправильно. Прежде всего, мой файл spe c находится внутри папки:

'C:\\Users\\username\\eclipse-workspace\\different_stuff\\allmytools\\mytool\\'

Таким образом, в моем файле spe c я написал вместо этого:

datas=[('./src/report_template/*','mytool/src/report_template')] 

где второй часть кортежа говорит, в какой части временной папки, созданной exe-файлом, должен быть найден файл, а также говорит, что и куда копировать файл в структуре внутри двоичного файла exe

...