2017-02-23 4 views
1

Ich habe eine Python-Anwendung, die von openpyxl abhängt und gut funktioniert, wenn es durch den Python-Interpreter ausgeführt wird. Allerdings beim Erstellen einer exe mit py2exe. Die exe wurde erzeugt, aber wenn ich darauf klicke ich einen Fehler und das folgende Protokoll erstellt:Py2Exe openpyxl importerror

Traceback (most recent call last): 
File "excelTest.py", line 1, in <module> 
File "openpyxl\__init__.pyc", line 30, in <module> 
File "openpyxl\workbook\__init__.pyc", line 5, in <module> 
File "openpyxl\workbook\workbook.pyc", line 16, in <module> 
File "openpyxl\writer\write_only.pyc", line 23, in <module> 
File "openpyxl\writer\excel.pyc", line 36, in <module> 
File "openpyxl\packaging\extended.pyc", line 4, in <module> 
ImportError: cannot import name __version__ 

Könnte jemand lassen Sie mich wissen, was das Problem ist und wie ich es beheben kann. Hier ist meine setup.py:

from distutils.core import setup 
import py2exe, sys, os 
sys.argv.append('py2exe') 
setup(windows=['excelTest.py'], options={"py2exe": {"includes": ["openpyxl","os","ntpath","Tkinter","tkFileDialog","sys"]}}) 
+0

openpyxl nicht Py2exe –

+0

@CharlieClark auf einer anderen Maschine unterstützt ich eine Arbeits ausführbare Datei mit py2exe und openpyxl erzeugen. Wie ist es möglich? – user7331766

Antwort

1

Ich hatte Dasselbe Problem.

Zuerst habe ich die vorgeschlagene Lösung des Downgrades auf 2.3 versucht, aber ich benutze schreibgeschützte Funktionen, die nicht funktionierten.

Dann, einige openpyxl Foren lesen, fand ich, dass das Problem ist, dass 2.4 eine Jason-Datei für die Konfiguration verwendet. Aber ich konnte py2exe nicht anweisen, es einzuschließen und zu benutzen.

Schließlich habe ich pyInstaller verwendet, und es funktionierte beim ersten Versuch.

2

Ich war das gleiche Problem mit openpyxl 2.4.3. Ich habe festgestellt, dass man zu einer älteren Version von openpyx zurückkehren muss, um eine .exe Datei zu erstellen. Dazu:

  1. Öffnen Sie die Eingabeaufforderung und Deinstallation openpyxl mit 'pip deinstallieren openpyxl'
  2. Neu installieren openpyxl eine ältere Version mit 'installieren pip openpyxl == 2.3.5'
5

Das Problem liegt daran, __version__ aus der .constants.json Datei gelesen wird und nicht von py2exe übernommen wird. Für die Arbeit um, herausgegeben ich die Bibliotheksdatei openpyxl \ Verpackung \ extended.py

#from openpyxl import __version__ 
__version__ = "2.4.5" 

ich den Import kommentiert und erstellt eine Variable __version__ mit der Version Text aus .constants.json Datei in openpyxl Bibliothek. Erstellte die ausführbare Datei erneut mit py2exe.

Arbeitete gut für mich.

+0

Arbeitete auch für mich. – Rodrigo

-1

In openpyxl \ Verpackung \ extended.py es in Zeile hinzufügen 5:

__version__ = str(__version__)