openpyxl模块没有属性' __ version __'当由熊猫进口时

时间:2016-08-30 14:26:37

标签: python pandas openpyxl conda

我从跑熊猫的追溯带我去:
site-packages\pandas\io\excel.py line 58, in get_writer AttributeError: 'module' object has no attribute '__version__'

我在PyInstaller repo中找到了这个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 文件中包含版本变量:

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

任何已知或潜在的修复或解决方法?

3 个答案:

答案 0 :(得分:2)

编辑没有产生影响,因为该过程被编译为这些模块正在运行的exe。在我的anaconda环境之外输出我需要的部分,现在这个过程顺利进行。

答案 1 :(得分:2)

我将我的解决方法添加到此讨论中,因为我使用openpyxl 2.4.0遇到了同样的问题,也许其他一些问题也被卡住了。 我发现要创建一个.exe文件,你必须恢复到旧版本的openpyxl。为此:

  1. 打开命令提示符并使用“pip uninstall openpyxl”
  2. 卸载openpyxl
  3. 使用旧版本'pip install openpyxl == 2.3.5'重新安装openpyxl
  4. 现在您应该可以使用py2exe,cx_freeze等创建.exe文件。

答案 2 :(得分:2)

这是我的修复:转到openpyxl site-package文件夹(对我而言: 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__))