Py2Exe openpyxl导入错误

Py2Exe openpyxl importerror

我有一个 python 应用程序,它依赖于 openpyxl,并且在 运行 通过 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"]}})

我在使用 openpyxl 2.4.3 时遇到了同样的问题。我发现要创建一个 .exe 文件,您必须恢复到旧版本的 openpyxl。为此:

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

我遇到了同样的问题。

首先,我尝试了降级到 2.3 的建议解决方案,但我使用的只读功能不起作用。

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

最后,我使用了 pyInstaller,第一次尝试就成功了。

问题是因为 __version__ 是从 .constants.json 文件中读取的,它没有被 py2exe 占用。为了解决这个问题,我编辑了库文件 openpyxl\packaging\extended.py

#from openpyxl import __version__
__version__ = "2.4.5"

我评论了导入并创建了一个变量 __version__,其中的版本文本来自 .constants.json 文件,存在于 openpyxl 库中。再次使用 py2exe 创建可执行文件。

对我来说效果很好。

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

__version__ = str(__version__)