ImportError: No module named Cython.Distutils

一笑奈何 提交于 2019-12-17 22:34:48

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!