61

我在尝试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

但它可以从命令行工作:

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

我确保 Enthought Python Distribution 而不是 Ubuntu 附带的 python 是默认运行的,方法是在我的 bash $PATH 环境变量之前添加 editor ~/.bashrc,并将其添加为最后一行:

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

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

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

4

12 回答 12

83

安装 Cython:

pip install cython
于 2014-11-01T08:38:09.487 回答
20

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

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

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

alias sudo='sudo env PATH=$PATH'
sudo python setup.py install
于 2012-12-10T09:25:42.210 回答
10

对于 python3 使用

sudo apt-get install cython3

对于 python2 使用

sudo apt-get install cython

详细信息可以在这里阅读

于 2016-11-16T04:19:19.403 回答
8

which python

那就是您的系统也默认的python的路径,然后转到@tiago的方法:

sudo <output of which python> setup.py install

于 2013-12-12T16:54:50.467 回答
5

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

于 2013-08-12T12:36:09.573 回答
1

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

于 2012-06-20T14:38:05.337 回答
1

在 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

于 2018-05-14T07:03:10.767 回答
1

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

pip uninstall cython && pip install cython
于 2019-03-01T17:08:20.000 回答
1

读了一千个这样的线程,最后得到了 Python 3。(如果你有这种安装,请用 pip3 替换 pip,如果你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
于 2020-04-03T07:07:31.127 回答
0

这很容易。

你可以install cython先试试打包。

它将升级您在 python 中内置的easy_install 。

于 2016-10-28T04:00:11.610 回答
0

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

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

安装 GCC 也可能有所帮助。

于 2020-01-07T11:31:51.343 回答
-1

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

sudo python setup.py install

然后运行命令

sudo python -c 'import Cython.Distutils'

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

于 2013-08-12T12:06:57.273 回答