[Numpy-discussion] ImportError: dynamic module does not define init function (initmultiarray)

Dominique Orban dominique.orban at gmail.com
Fri Aug 19 19:00:04 EDT 2011


Dear list,

I'm embedding Python inside a C program to pull functions from
user-supplied Python modules. All is well except when the
user-supplied module imports numpy. Requesting a stack trace when an
exception occurs reveals the following:

---
Traceback (most recent call last):
  File "/Users/dpo/.virtualenvs/matrox/matrox/curve.py", line 3, in <module>
    import numpy as np
  File "/Users/dpo/.virtualenvs/matrox/lib/python2.7/site-packages/numpy/__init__.py",
line 137, in <module>
    import add_newdocs
  File "/Users/dpo/.virtualenvs/matrox/lib/python2.7/site-packages/numpy/add_newdocs.py",
line 9, in <module>
    from numpy.lib import add_newdoc
  File "/Users/dpo/.virtualenvs/matrox/lib/python2.7/site-packages/numpy/lib/__init__.py",
line 4, in <module>
    from type_check import *
  File "/Users/dpo/.virtualenvs/matrox/lib/python2.7/site-packages/numpy/lib/type_check.py",
line 8, in <module>
    import numpy.core.numeric as _nx
  File "/Users/dpo/.virtualenvs/matrox/lib/python2.7/site-packages/numpy/core/__init__.py",
line 5, in <module>
    import multiarray
ImportError: dynamic module does not define init function (initmultiarray)
---

(here, "curve.py" is the user-supplied module in question.)

The symbol initmultiarray *is* defined in multiarray.so so I'm
wondering if anybody has suggestions as to what the problem may be
here.

A bit of Googling reveals the following:

* The 3rd example of Section 31.2.5 of
http://www.swig.org/Doc1.3/Python.html says

   "This error is almost always caused when a bad name is given to the
shared object file. For example, if you created a file example.so
instead of _example.so you would get this error."

* Item #2 in the FAQ at http://biggles.sourceforge.net/doc/1.5/faq says

  "This is a problem with your module search path. Python is loading
[multiarray].so as a module instead of [multiarray].py"

But I don't have any multiarray.py. I have other multiarray.so's, but
they're not in my search path. And I'm not finding any _multiarray.so
with a leading underscore.

So I am lead to ask: should multiarray.so really be called
_multiarray.so? If not, any idea what the problem is?

I'm using Python 2.7.2 compiled as a framework using Homebrew on OSX
10.6.8 and Numpy 1.6.1 installed from PyPi a day or two ago.

Thanks much in advance!

-- 
Dominique



More information about the NumPy-Discussion mailing list