在尝试安装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
... 由于不知道该怎么办,我进入了我的site packages目录 (/usr/local/epd/lib/python2.7/site-packages
),并给 Cython
、Distutils
、build_ext.py
以及 __init__.py
文件分别赋予了完全权限(r,w,x)。也许这样做有点儿蠢,但它没有改变任何东西。
下一步应该试什么呢?有什么想法吗?
sys.path
里有什么? - Lev Levitskysudo python -c 'import Cython.Distutils'
可以正常工作吗? - jfssudo apt-get install python-dev; sudo pip install cython
,它的意思是安装 Python 开发包并使用 pip 安装 Cython。 - Martin Thoma