由 pandas 导入时,openpyxl 模块没有属性“__version__”
openpyxl module does not have attribute '__version__' when imported by pandas
我从 运行 pandas 回溯到:
site-packages\pandas\io\excel.py line 58, in get_writer
AttributeError: 'module' object has no attribute '__version__'
我在 PyInstaller 存储库中发现 link 到 git 问题
https://github.com/pyinstaller/pyinstaller/issues/1890 并找到我的 openpyxl 版本,手动将其添加到 get_writer 方法中,如下所示:
def get_writer(engine_name):
if engine_name == 'openpyxl':
try:
import openpyxl
#remove when conda update available
openpyxl.__version__ = '2.3.2'
# with version-less openpyxl engine
# make sure we make the intelligent choice for the user
if LooseVersion(openpyxl.__version__) < '2.0.0':
return _writers['openpyxl1']
elif LooseVersion(openpyxl.__version__) < '2.2.0':
return _writers['openpyxl20']
else:
return _writers['openpyxl22']
except ImportError:
# fall through to normal exception handling below
pass
try:
return _writers[engine_name]
except KeyError:
raise ValueError("No Excel writer '%s'" % engine_name)
仍然没有骰子。错误回溯中给出的行号甚至没有改变。然后我将 openpyxl 版本更新为 2.3.5,仍然收到错误。 openpyxl init 文件中有一个 version 变量:
try:
here = os.path.abspath(os.path.dirname(__file__))
src_file = os.path.join(here, ".constants.json")
with open(src_file) as src:
constants = json.load(src)
__author__ = constants['__author__']
__author_email__ = constants["__author_email__"]
__license__ = constants["__license__"]
__maintainer_email__ = constants["__maintainer_email__"]
__url__ = constants["__url__"]
__version__ = constants["__version__"]
except IOError:
# packaged
pass
任何已知或潜在的修复或解决方法?
编辑没有产生影响,因为该过程被编译成这些模块 运行 通过的 exe。将我需要的部分导出到我的 anaconda 环境之外,现在该过程可以顺利进行。
我将把我的解决方法添加到这个讨论中,因为我在使用 openpyxl 2.4.0 时遇到了同样的问题,也许其他一些问题也被卡住了。
我发现要创建一个 .exe 文件,您必须恢复到旧版本的 openpyxl。为此:
- 打开命令提示符并用'pip uninstall openpyxl'
卸载openpyxl
- 使用旧版本重新安装 openpyxl 'pip install openpyxl==2.3.5'
现在您应该可以使用 py2exe、cx_freeze 等创建 .exe 文件
这是我的解决方法:转到您的 openpyxl 站点包文件夹(对我来说是:C:\Python27\Lib\site-packages\openpyxl)。将 .constant.json 文件中的所有变量直接复制到 _ init _.py 文件中,因此它看起来像:
import json
import os
__author__= "See AUTHORS"
__author_email__= "eric.gazoni@gmail.com"
__license__= "MIT/Expat",
__maintainer_email__= "openpyxl-users@googlegroups.com"
__url__= "http://openpyxl.readthedocs.org"
__version__= "2.4.0"
try:
here = os.path.abspath(os.path.dirname(__file__))
我从 运行 pandas 回溯到:
site-packages\pandas\io\excel.py line 58, in get_writer
AttributeError: 'module' object has no attribute '__version__'
我在 PyInstaller 存储库中发现 link 到 git 问题 https://github.com/pyinstaller/pyinstaller/issues/1890 并找到我的 openpyxl 版本,手动将其添加到 get_writer 方法中,如下所示:
def get_writer(engine_name):
if engine_name == 'openpyxl':
try:
import openpyxl
#remove when conda update available
openpyxl.__version__ = '2.3.2'
# with version-less openpyxl engine
# make sure we make the intelligent choice for the user
if LooseVersion(openpyxl.__version__) < '2.0.0':
return _writers['openpyxl1']
elif LooseVersion(openpyxl.__version__) < '2.2.0':
return _writers['openpyxl20']
else:
return _writers['openpyxl22']
except ImportError:
# fall through to normal exception handling below
pass
try:
return _writers[engine_name]
except KeyError:
raise ValueError("No Excel writer '%s'" % engine_name)
仍然没有骰子。错误回溯中给出的行号甚至没有改变。然后我将 openpyxl 版本更新为 2.3.5,仍然收到错误。 openpyxl init 文件中有一个 version 变量:
try:
here = os.path.abspath(os.path.dirname(__file__))
src_file = os.path.join(here, ".constants.json")
with open(src_file) as src:
constants = json.load(src)
__author__ = constants['__author__']
__author_email__ = constants["__author_email__"]
__license__ = constants["__license__"]
__maintainer_email__ = constants["__maintainer_email__"]
__url__ = constants["__url__"]
__version__ = constants["__version__"]
except IOError:
# packaged
pass
任何已知或潜在的修复或解决方法?
编辑没有产生影响,因为该过程被编译成这些模块 运行 通过的 exe。将我需要的部分导出到我的 anaconda 环境之外,现在该过程可以顺利进行。
我将把我的解决方法添加到这个讨论中,因为我在使用 openpyxl 2.4.0 时遇到了同样的问题,也许其他一些问题也被卡住了。 我发现要创建一个 .exe 文件,您必须恢复到旧版本的 openpyxl。为此:
- 打开命令提示符并用'pip uninstall openpyxl' 卸载openpyxl
- 使用旧版本重新安装 openpyxl 'pip install openpyxl==2.3.5'
现在您应该可以使用 py2exe、cx_freeze 等创建 .exe 文件
这是我的解决方法:转到您的 openpyxl 站点包文件夹(对我来说是:C:\Python27\Lib\site-packages\openpyxl)。将 .constant.json 文件中的所有变量直接复制到 _ init _.py 文件中,因此它看起来像:
import json import os __author__= "See AUTHORS" __author_email__= "eric.gazoni@gmail.com" __license__= "MIT/Expat", __maintainer_email__= "openpyxl-users@googlegroups.com" __url__= "http://openpyxl.readthedocs.org" __version__= "2.4.0" try: here = os.path.abspath(os.path.dirname(__file__))