2015-06-23 9 views
0

В настоящее время я пытаюсь упаковать приложение Tkinter в файл .exe с помощью py2exe. Упаковка работает отлично, и до момента она функционирует. Когда я называю определенную функцию, хотя, запустив файл с расширением .exe регистрирует следующую ошибку:py2exe PackageNotFoundError

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "Tkinter.pyc", line 1532, in __call__ 
    File "/Users/Gordon/Gordon's Files/AutoFormatter/lib\formatterApp.py", line 58, in go 
    File "formatter.pyc", line 72, in take 
    File "docx\api.pyc", line 25, in Document 
    File "docx\opc\package.pyc", line 116, in open 
    File "docx\opc\pkgreader.pyc", line 32, in from_file 
    File "docx\opc\phys_pkg.pyc", line 31, in __new__ 
PackageNotFoundError: Package not found at 'C:\Users\Gordon\Gordon's Files\AutoFormatter\dist\library.zip\docx\templates\default.docx' 

После первоначально запущен py2exe, я проверил \ DOCX \ папки и обнаружил, что py2exe не фактически скопирован над \ шаблоны \ папка. После ручного разархивирования library.zip, добавив в папку \ templates \ в нужном месте, а затем вручную повторно запустив, я получаю ту же ошибку.

Мой setup.py выглядит следующим образом:

from distutils.core import setup 
import py2exe 

setup(
    windows=[{'script': 'AutoFormatter.py'}], 
    options={ 
     'py2exe': 
     { 
      'includes': ['lxml.etree', 'lxml._elementpath', 'gzip', 'docx'], 
     } 
    } 
) 

Я бегу программу на Windows 7 компьютер с помощью Python 2.7.8 и 0.6.9 py2exe.

+0

попытайтесь использовать 'pyinstaller' для той же цели. это, кажется, не так сложно – Andersson

+0

Я сделал, и я получаю точно такую ​​же ошибку - и для того же самого файла, не меньше. Может ли это быть чем-то родным для библиотеки python-docx? –

ответ

0

Возможно, это было слишком поздно, но у меня были те же проблемы. Я не знаю, было ли python-docx скомпилировано в один исполняемый файл, тем не менее я нашел решение.

Я нахожусь на pyinstaller с python2.7, по сути то же самое. Я надеюсь, что вы замерзаете в один каталог, а не один файл. Это не будет работать, если вы замерзнуть один файл

Скачать this here (ссылка Mediafire)

Место это в

C:\Users\Gordon\Gordon's Files\AutoFormatter\dist\library.zip\docx\templates\default.docx 

в основном там, где ваш .exe находится.

Надеюсь, что это делает трюк

Основано на том, что я пробираюсь сквозь свои собственные каталоги a й модуль DOCX, при создании документа:

doc = Document() 
doc.save('hello.docx') 

Он вытягивает шаблон для вас использовать, если вы не создать свой собственный, он будет использовать шаблон по умолчанию, предлагаемый сам питон-DOCX.

Не цитируйте меня на этом, но я считаю, что python-docx просматривает свои собственные каталоги, чтобы найти шаблон default.docx при выполнении его через python.

Поскольку мы составили сценарий, путь изменился к каталогу, в котором находится .exe, однако pyinstaller (или в случае py2exe) не включает в себя шаблон с DIST папки, и это создает PackageNotFoundError

+0

Вместо того, чтобы вручную копировать файл, вы можете [включить его в сборку pyinstaller] (https://pythonhosted.org/PyInstaller/spec-files.html#adding-files-to-the-bundle). Это также будет работать с опцией «один файл». – Repiklis