Numpy: ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'

Created on 22 Jan 2019  ·  9Comments  ·  Source: numpy/numpy

Hi,

I got a problem similar to #11871. I recently installed numpy 1.16.0 but then I needed to downgrade and now I keep getting ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'.
The example below was working fine a week ago or so.

I actually ended up removing ALL Python packages (instructions here) and reinstalling them _one by one_ using apt-get (Ubuntu 18.04.1 LTS), except for ipyparallel and openbabel, which were installed using pip (I'm pretty sure both are unrelated to the problem). The example below was run _after_ all this clean-up.

It seems that a lot of people are having this issue lately, with different packages:

Reproducing code example and error message:

Below is a IPython session that shows the error:

% ipython3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
Type "copyright", "credits" or "license" for more information.

IPython 5.5.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import pandas as pd

In [2]: pd.read_hdf("data.h5")
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-2-122d644764c1> in <module>()
----> 1 pd.read_hdf("data.h5")

/usr/lib/python3/dist-packages/pandas/io/pytables.py in read_hdf(path_or_buf, key, mode, **kwargs)
    368                                      'contains multiple datasets.')
    369             key = candidate_only_group._v_pathname
--> 370         return store.select(key, auto_close=auto_close, **kwargs)
    371     except:
    372         # if there is an error, close the store

/usr/lib/python3/dist-packages/pandas/io/pytables.py in select(self, key, where, start, stop, columns, iterator, chunksize, auto_close, **kwargs)
    715                            chunksize=chunksize, auto_close=auto_close)
    716 
--> 717         return it.get_result()
    718 
    719     def select_as_coordinates(

/usr/lib/python3/dist-packages/pandas/io/pytables.py in get_result(self, coordinates)
   1455 
   1456         # directly return the result
-> 1457         results = self.func(self.start, self.stop, where)
   1458         self.close()
   1459         return results

/usr/lib/python3/dist-packages/pandas/io/pytables.py in func(_start, _stop, _where)
    708             return s.read(start=_start, stop=_stop,
    709                           where=_where,
--> 710                           columns=columns, **kwargs)
    711 
    712         # create the iterator

/usr/lib/python3/dist-packages/pandas/io/pytables.py in read(self, start, stop, **kwargs)
   2902             blk_items = self.read_index('block%d_items' % i)
   2903             values = self.read_array('block%d_values' % i,
-> 2904                                      start=_start, stop=_stop)
   2905             blk = make_block(values,
   2906                              placement=items.get_indexer(blk_items))

/usr/lib/python3/dist-packages/pandas/io/pytables.py in read_array(self, key, start, stop)
   2457 
   2458         if isinstance(node, tables.VLArray):
-> 2459             ret = node[0][start:stop]
   2460         else:
   2461             dtype = getattr(attrs, 'value_type', None)

/usr/lib/python3/dist-packages/tables/vlarray.py in __getitem__(self, key)
    669                 key += self.nrows
    670             (start, stop, step) = self._process_range(key, key + 1, 1)
--> 671             return self.read(start, stop, step)[0]
    672         elif isinstance(key, slice):
    673             start, stop, step = self._process_range(

/usr/lib/python3/dist-packages/tables/vlarray.py in read(self, start, stop, step)
    813         atom = self.atom
    814         if not hasattr(atom, 'size'):  # it is a pseudo-atom
--> 815             outlistarr = [atom.fromarray(arr) for arr in listarr]
    816         else:
    817             # Convert the list to the right flavor

/usr/lib/python3/dist-packages/tables/vlarray.py in <listcomp>(.0)
    813         atom = self.atom
    814         if not hasattr(atom, 'size'):  # it is a pseudo-atom
--> 815             outlistarr = [atom.fromarray(arr) for arr in listarr]
    816         else:
    817             # Convert the list to the right flavor

/usr/lib/python3/dist-packages/tables/atom.py in fromarray(self, array)
   1226         if array.size == 0:
   1227             return None
-> 1228         return six.moves.cPickle.loads(array.tostring())

ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'

Some relevant files and versions:

In [4]: import pandas as pd

In [5]: pd.__file__
Out[5]: '/usr/lib/python3/dist-packages/pandas/__init__.py'

In [6]: pd.__version__
Out[6]: '0.22.0'

In [7]: pd.__path__
Out[7]: ['/usr/lib/python3/dist-packages/pandas']

In [8]: import tables

In [9]: tables.__file__
Out[9]: '/usr/lib/python3/dist-packages/tables/__init__.py'

In [10]: tables.__version__
Out[10]: '3.4.2'

In [11]: tables.__path__
Out[11]: ['/usr/lib/python3/dist-packages/tables']

In [12]: import six

In [13]: six.__file__
Out[13]: '/usr/lib/python3/dist-packages/six.py'

In [14]: six.__version__
Out[14]: '1.11.0'

In [15]: six.__path__
Out[15]: []

Numpy/Python version information:

In [1]: import sys, numpy; print(numpy.__version__, sys.version)
1.13.3 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0]

In [2]: import pandas; pandas.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 3.6.7.final.0
python-bits: 64
OS: Linux
OS-release: 4.15.0-43-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_GB.UTF-8
LOCALE: pt_BR.UTF-8

pandas: 0.22.0
pytest: None
pip: 9.0.1
setuptools: 40.6.3
Cython: None
numpy: 1.13.3
scipy: 0.19.1
pyarrow: None
xarray: None
IPython: 5.5.0
sphinx: None
patsy: 0.4.1+dev
dateutil: 2.6.1
pytz: 2018.3
blosc: None
bottleneck: None
tables: 3.4.2
numexpr: 2.6.4
feather: None
matplotlib: 2.1.1
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml: None
bs4: 4.6.0
html5lib: 0.999999999
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: 2.10
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None

I'm using Ubuntu 18.04.1 LTS:

% uname -a
Linux mothership 4.15.0-43-generic #46-Ubuntu SMP Thu Dec 6 14:45:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

In #11871 @mattip mentioned that

The c-extension module _multiarray_umath is new to numpy 1.16.0, and may indicate a mix of versions, or version expectations, somewhere. Note this issue is closed, if you believe there is a problem with numpy please open a new issue detailing exactly what you are doing.

How come I get this error even though I have numpy 1.13.3? Thanks for all the help!

Most helpful comment

FYI, I just resolved this issue by forcing a reinstall of numpy and pandas as follows:

pip install --upgrade --force-reinstall numpy==1.14.5
pip install --upgrade --force-reinstall pandas==0.22.0

No more error message.

All 9 comments

It seems like you are unpickling an array which was saved in numpy 1.16 in numpy 1.13.3

This one looks like a real bug. I think we might need to override ndarray.__module__ to be backwards-compatible.

I believe @tzickel is correct. I just regenerated data.h5 from scratch (which makes use of a script, this time definitely using numpy 1.13.3) and the code above worked.

% ipython3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
Type "copyright", "credits" or "license" for more information.

IPython 5.5.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import pandas as pd

In [2]: df = pd.read_hdf("data.h5")

In [3]: df.columns
Out[3]: 
Index(['aonames', 'atombasis', 'atomcharges', 'atomcoords', 'atommasses',
       'atomnos', 'charge', 'coreelectrons', 'enthalpy', 'entropy',
       'freeenergy', 'gbasis', 'geotargets', 'geovalues', 'grads', 'homos',
       'jobfilename', 'metadata', 'mocoeffs', 'moenergies', 'moments',
       'mosyms', 'mult', 'natom', 'nbasis', 'nmo', 'optdone', 'optstatus',
       'polarizabilities', 'pressure', 'scfenergies', 'scftargets',
       'scfvalues', 'temperature', 'vibdisps', 'vibfreqs', 'vibirs',
       'vibsyms'],
      dtype='object')

In [4]: df["freeenergy"].head()
Out[4]: 
0   -228.614123
1   -229.062884
2   -552.464074
3   -552.010916
4   -552.006776
Name: freeenergy, dtype: float64

I'm closing this since I belive it's solved. Thanks @tzickel!

I do not believe this error is resolved. I'm not using any pickle files and I am getting this exact same error.

I have this error recently since a few changes on my MAC. I followed all the best practices and can't seem to resolve this error.

Upgraded to MAC High Sierra (10.13.6)

installed both python 3.6 and python 3.7 to run side by side using home-brew and followed the guidelines presented here:
https://stackoverflow.com/questions/51726203/installing-python3-6-alongside-python3-7-on-mac

setup new virtual env to use python 3.6.5 and a bunch of other modules.

This error occurs in the virtual environment. Both notebooks and command line python code generate the error. The python code runs 100% correctly with no other errors than this message.

python my_py_file.py
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'

I deleted and recreated the venv but the error persists. Likely all the code continues to run without any other errors.

I'm not sure what to do next. If there is a solution, please let me know otherwise IMHO this issues should not be closed.

A similar issue is being tracked here:
https://github.com/alpacahq/pylivetrader/issues/73

FYI, I just resolved this issue by forcing a reinstall of numpy and pandas as follows:

pip install --upgrade --force-reinstall numpy==1.14.5
pip install --upgrade --force-reinstall pandas==0.22.0

No more error message.

Solved this issue!

  1. I was getting the same issue in numpy.load('myfile.py'):

Traceback (most recent call last):
File "", line 1, in
File "/home/vivek/anaconda3/envs/Voiceattn/lib/python3.6/site-packages/numpy/lib/npyio.py", line 421, in load
pickle_kwargs=pickle_kwargs)
File "/home/vivek/anaconda3/envs/Voiceattn/lib/python3.6/site-packages/numpy/lib/format.py", line 650, in read_array
array = pickle.load(fp, **pickle_kwargs)
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'

  1. Inside an Anaconda virtual env, the following config solved this issue in my case.

numpy 1.16.0
pandas 0.22.0
pip 18.1 py36_0
python 3.6.8 h0371630_0

  1. OS X version: macOS High Sierra v10.13.6

Hope this helps!

Solved this issue!

1. I was getting the same issue in numpy.load('myfile.py'):

Traceback (most recent call last):
File "", line 1, in
File "/home/vivek/anaconda3/envs/Voiceattn/lib/python3.6/site-packages/numpy/lib/npyio.py", line 421, in load
pickle_kwargs=pickle_kwargs)
File "/home/vivek/anaconda3/envs/Voiceattn/lib/python3.6/site-packages/numpy/lib/format.py", line 650, in read_array
array = pickle.load(fp, **pickle_kwargs)
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'

1. Inside an Anaconda virtual env, the following config solved this issue in my case.

numpy 1.16.0
pandas 0.22.0
pip 18.1 py36_0
python 3.6.8 h0371630_0

1. OS X version: macOS High Sierra v10.13.6

Hope this helps!

Been having this issue and this solved the problem for me, too. Thanks!

Update numpy with pip and it will work:

pip install --upgrade numpy

@mlsmall thanks. it is magic.

Was this page helpful?
0 / 5 - 0 ratings