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

Posted

技术标签:

【中文标题】ImportError:没有名为 Cython.Distutils 的模块【英文标题】:ImportError: No module named Cython.Distutils 【发布时间】:2012-06-21 22:25:59 【问题描述】:

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

ImportError: No module named 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

但它可以从命令行运行:

>>> 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

请注意,第一个导入成功,第二个引发错误。将此与 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

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

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

确实which python 吐出/usr/local/epd/bin/python...不知道还能尝试什么,我进入了我的站点包目录(/usr/local/epd/lib/python2.7/site-packages)并授予@987654333 的完全权限(r,w,x) @、Distutilsbuild_ext.py__init__.py 文件。尝试可能很愚蠢,但它没有任何改变。

想不出接下来要尝试什么!?有什么想法吗?

【问题讨论】:

我什么都想不出来,但你的sys.path 里有什么? sudo python -c 'import Cython.Distutils' 工作吗? 我的实验产生了相同的结果,我在 ubuntu 12-04、cython、numpy、scipy 上安装了 Python 2.7。相同的错误回溯(最近一次调用最后一次):文件“setup.py”,第 4 行,在来自 Cython.Distutils 的 中 import build_ext 。似乎没有一个答案可以解决这个问题。各位专家帮忙!!! 对于通过 google 找到此内容的人:sudo apt-get install python-dev; sudo pip install cython 【参考方案1】:

安装 Cython:

pip install cython

【讨论】:

这对我有用,但不适用于最新版本的 cython[0.22],但适用于以前的版本 0.21.2 对于那些没有在依赖列表中明确包含cython,或者没有正确管理它们的依赖(在我的例子中是hmmlearn 0.1.1)的包的解决方案。跨度> 我需要 python-dev 用于 python lib 头文件【参考方案2】:

你的 sudo 没有得到正确的 python。这是 sudo 在 Ubuntu 中的已知行为。请参阅此question 了解更多信息。您需要确保 sudo 调用正确的 python,或者使用完整路径:

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

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

alias sudo='sudo env PATH=$PATH'
sudo python setup.py install

【讨论】:

我发布这个问题已经有一段时间了,但这确实是我解决问题的方法。最近的一篇文章提醒我它仍然是开放的。使用@user91279 的建议为您找到正确的路径。【参考方案3】:

对于python3使用

sudo apt-get install cython3

供python2使用

sudo apt-get install cython

详情可以阅读this

【讨论】:

谢谢!我在 Windows 10 WSL 上使用 Debian Buster,在这种特定情况下,这是解决方案【参考方案4】:

运行

which python

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

sudo &lt;output of which python&gt; setup.py install

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

在 CLI-python 中,导入 sys 并查看 sys.path 中的内容 然后尝试使用export PYTHONPATH=whatyougot

【讨论】:

【参考方案7】:

在 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

这个链接帮助了我:https://github.com/trezor/python-trezor/issues/40

【讨论】:

【参考方案8】:

在现代又遇到了这个问题。解决方法很简单:

pip uninstall cython && pip install cython

【讨论】:

【参考方案9】:

读了一千个这样的线程,终于在 Python 3 上得到了它。(如果您有这种安装,请将 pip 替换为 pip3,如果您在运行任何这些之前尝试过其他解决方案,请运行 pip uninstall cython

苹果机:

brew install cython
pip install --upgrade cython

Ubuntu

sudo apt-get install cython3 python-dev  
pip install --upgrade cython

Windows(必须有 conda,并且 MinGW 已经在路径中)

conda install cython
conda install --upgrade cython

【讨论】:

【参考方案10】:

这很容易。

你可以先试试install cython包。

它将升级您的 easy_install 内置 python。

【讨论】:

【参考方案11】:

我依赖于 Cython 上的第三方库,由于 ImportError,我没有设法在 Travis 上构建项目。如果有人需要它 - 在安装 requirements.txt 之前运行这个命令:

pip install Cython --install-option="--no-cython-compile"

安装 GCC 也可能会有所帮助。

【讨论】:

【参考方案12】:

只需从以下位置安装 Cython http://cython.org/#download 并使用此命令安装它

sudo python setup.py install

然后运行命令

sudo python -c 'import Cython.Distutils'

它将被安装并且错误消息将消失。

【讨论】:

以上是关于ImportError:没有名为 Cython.Distutils 的模块的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:没有名为枚举的模块

ImportError:没有名为“appdirs”的模块

ImportError:没有名为 websocket 的模块

ImportError:没有名为“backports”的模块

ImportError:没有名为 ghostscript 的模块

ImportError:运行火花时没有名为请求的模块