ImportError:没有名为Cython.Distutils的模块

Edw*_*ell 55 python importerror enthought

我在尝试zenlib使用其setup.py文件安装Python库时遇到了一个奇怪的问题.当我运行该setup.py文件时,我收到导入错误,说

ImportError:没有名为Cython.Distutils`的模块

但我确实有这样一个模块,我可以在python命令行上导入它,没有任何麻烦.为什么我会收到此导入错误?

我认为问题可能与我使用Enthought Python Distribution这个事实有关,我事先安装了它,而不是使用Ubuntu 12.04附带的Python 2.7.

更多背景:这正是我在尝试运行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
Run Code Online (Sandbox Code Playgroud)

但它可以从命令行工作:

>>> 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
Run Code Online (Sandbox Code Playgroud)

请注意第一个导入工作,第二个导致错误.将其与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
Run Code Online (Sandbox Code Playgroud)

我确保Enthought Python Distribution而不是Ubuntu附带的python是默认运行的,通过编辑预先添加我的bash $ PATH环境变量~/.bashrc,将其添加为最后一行:

export PATH=/usr/local/epd/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

果然which python吐出来/usr/local/epd/bin/python......不知道什么尝试,我走进我的网站packages目录,( /usr/local/epd/lib/python2.7/site-packages)和充分的权限(R,W,X)来Cython,Distutils,build_ext.py,和__init__.py文件.尝试可能很傻,但它什么都没改变.

想不出接下来会尝试什么!?有任何想法吗?

Mar*_*oma 74

安装Cython:

pip install cython
Run Code Online (Sandbox Code Playgroud)

  • 我需要 python-dev 作为 python lib 头文件 (2认同)

tia*_*ago 18

你的sudo没有得到正确的python.这是Ubuntu中sudo的已知行为.有关详细信息,请参阅此问题.您需要确保sudo通过使用完整路径调用正确的python:

sudo /usr/local/epd/bin/python setup.py install
Run Code Online (Sandbox Code Playgroud)

或者通过执行以下操作(在bash中):

alias sudo='sudo env PATH=$PATH'
sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)


ash*_*ley 8

which python

这是你的系统默认的python的路径然后转到@ tiago的方法:

sudo <output of which python> setup.py install


小智 6

用于python3使用

sudo apt-get install cython3
Run Code Online (Sandbox Code Playgroud)

用于python2使用

sudo apt-get install cython
Run Code Online (Sandbox Code Playgroud)

细节可以在这里阅读


Dep*_*ado 5

我只给你一个建议:创建一个virtualenv.这将确保您只有一个版本的python和本地安装的所有软件包(而不是整个系统).
应该是解决方案之一.