Edward Newell Edward Newell - 1 year ago 390
Python Question

python ImportError: Cython.Distutils

I'm having a strange problem while trying to install a python library using its setup.py file. when I run the setup.py file, I get an import error, saying

ImportError: No module named Cython.Distutils
, but I do have such a module, and I can import it on the python command line without any trouble. Why might I be getting this import error??

I've looked around at a few dozen cases of import errors, read about imports and packages etc., but can't seem to figure it out. I'm now at day two-and-a-half of being stuck at this point, so I figure it's time to ask for help!

The library is called zenlib. I think that the problem may have to do with the fact that I am using Enthought Python Distribution which I installed right beforehand, rather than using the Python2.7 that came with Ubuntu 12.04.

More background:
Here's exactly what I get when trying to run setup.py:

enwe101@enwe101-PCL:~/zenlib/src$ sudo python setup.py install
Traceback (most recent call last):
File "setup.py", line 4, in <module>
from Cython.Distutils import build_ext
ImportError: No module named Cython.Distutils

But it works from the command line:

>>> from Cython.Distutils import build_ext
>>> from fake.package import noexist
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named fake.package

Note the first import worked and the second throws an error. Compare this to the first few lines of setup.py:

#from distutils.core import setup
from setuptools import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import os.path

I made sure that the Enthought Python Distribution and not the python that came with Ubuntu is what is run by default by prepending my bash $PATH environment variable by editing
, adding this as the last line:

export PATH=/usr/local/epd/bin:$PATH

and indeed
which python
spits out
... not knowing what else to try, I went into my site packages directory, (
) and give full permissions (r,w,x) to
, and the
files. Probably silly to try, and it changed nothing.

Can't think of what to try next!? Any ideas?

Answer Source

Your sudo is not getting the right python. This is a known behaviour of sudo in Ubuntu. See this question for more info. You need to make sure that sudo calls the right python, either by using the full path:

sudo /usr/local/epd/bin/python setup.py install

or by doing the following (in bash):

alias sudo='sudo env PATH=$PATH'
sudo python setup.py install
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download