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) @、Distutils
、build_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 的 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 <output of which python> 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:没有名为 websocket 的模块
ImportError:没有名为“backports”的模块