thefromanguard thefromanguard - 1 year ago 93
Python Question

openpyxl module does not have attribute '__version__' when imported by pandas

My traceback from running pandas takes me to:

site-packages\pandas\io\ line 58, in get_writer
AttributeError: 'module' object has no attribute '__version__'

I found this link to a git issue in the PyInstaller repo and found my openpyxl version, manually added it into the get_writer method like so:

def get_writer(engine_name):
if engine_name == 'openpyxl':
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']
return _writers['openpyxl22']
except ImportError:
# fall through to normal exception handling below

return _writers[engine_name]
except KeyError:
raise ValueError("No Excel writer '%s'" % engine_name)

Still no dice. The line number given in the error traceback doesn't even change. I then updated the openpyxl version to 2.3.5, still receiving the error. The openpyxl init file has a version variable in it:

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

Any known or potential fixes or workarounds?

Answer Source

Edits were not making an impact because the process was compiled into an exe that these modules were running through. Exported the sections I needed outside of my anaconda environment and now the process works without a hitch.