Py2Exe openpyxl importerror

时间:2017-02-23 09:26:19

标签: python error-handling executable py2exe openpyxl

我有一个依赖于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"]}})

4 个答案:

答案 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。为此:

  1. 打开命令提示符并使用“pip uninstall openpyxl”
  2. 卸载openpyxl
  3. 使用旧版本'pip install openpyxl == 2.3.5'重新安装openpyxl

答案 2 :(得分:1)

我遇到了同样的问题。

首先,我尝试了降级到2.3的建议解决方案,但是我使用了无效的只读函数。

然后,阅读一些openpyxl论坛,我发现问题是2.4使用Jason文件进行配置。但我无法指示py2exe包含它并使用它。

最后,我使用了pyInstaller,它在第一次尝试时起作用。

答案 3 :(得分:-1)

在openpyxl \ packaging \ extended.py中,在第5行添加:

__version__ = str(__version__)