Edward Newell Edward Newell - 1 month ago 19
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
~/.bashrc
, adding this as the last line:

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


and indeed
which python
spits out
/usr/local/epd/bin/python
... not knowing what else to try, I went into my site packages directory, (
/usr/local/epd/lib/python2.7/site-packages
) and give full permissions (r,w,x) to
Cython
,
Distutils
,
build_ext.py
, and the
__init__.py
files. Probably silly to try, and it changed nothing.

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

Answer

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