我有一个依赖于openpyxl的python应用程序,并且在通过python解释器运行时效果很好。但是,在使用py2exe创建exe时。 exe是生成的,但当我点击它时,我收到一个错误,并生成以下日志:
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__
有谁能让我知道问题是什么以及我如何解决它。 这是我的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 :(得分:9)
问题是因为__version__是从.constants.json文件中读取的,并且它没有被py2exe占用。为了解决方法,我编辑了库文件openpyxl \ packaging \ extended.py
#from openpyxl import __version__
__version__ = "2.4.5"
我评论了导入并使用openpyxl库中存在的.constants.json文件的版本文本创建了一个变量__version__。再次使用py2exe创建了可执行文件。
对我来说很好。
答案 1 :(得分:2)
我使用openpyxl 2.4.3遇到了同样的问题。我发现要创建一个.exe文件,你必须恢复到旧版本的openpyxl。为此:
答案 2 :(得分:1)
我遇到了同样的问题。
首先,我尝试了降级到2.3的建议解决方案,但是我使用了无效的只读函数。
然后,阅读一些openpyxl论坛,我发现问题是2.4使用Jason文件进行配置。但我无法指示py2exe包含它并使用它。
最后,我使用了pyInstaller,它在第一次尝试时起作用。
答案 3 :(得分:-1)
在openpyxl \ packaging \ extended.py中,在第5行添加:
__version__ = str(__version__)