问题
I'm having a strange problem while trying to install the Python library zenlib
, 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 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 Python 2.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?
回答1:
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
回答2:
Install Cython:
pip install cython
回答3:
Run
which python
Thats the path to the python that your system has defaulted too then go to @tiago's method of:
sudo <output of which python> setup.py install
回答4:
For python3 use
sudo apt-get install cython3
For python2 use
sudo apt-get install cython
Details can be read at this
回答5:
I only got one advice for you : Create a virtualenv. This will ensure you have only one version of python and all your packages installed locally (and not on your entire system).
Should be one of the solutions.
回答6:
In the CLI-python, import sys and look what's inside sys.path
Then try to use export PYTHONPATH=whatyougot
回答7:
Running the following commands resolved the issue for me in ubuntu 14.04:
sudo apt-get install python-dev
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libsystemd-daemon-dev
sudo pip install cython
This link helped me: https://github.com/trezor/python-trezor/issues/40
回答8:
Ran into this again in modern times. The solution was simple:
pip uninstall cython && pip install cython
回答9:
That is easy.
You could try install cython
package first.
It will upgrade your easy_install built in python.
回答10:
Just install Cython from http://cython.org/#download and install it using this command
sudo python setup.py install
Then run the command
sudo python -c 'import Cython.Distutils'
and it will be installed and the error message will disappear.
来源:https://stackoverflow.com/questions/11108461/importerror-no-module-named-cython-distutils