2012-06-19 3 views
39

У меня возникла странная проблема при попытке установить библиотеку python с помощью файла setup.py. когда я запускаю файл setup.py, я получаю ошибку импорта, говоря ImportError: No module named Cython.Distutils, но у меня есть такой модуль, и я могу без проблем импортировать его в командной строке python. Почему я могу получить эту ошибку импорта?python ImportError: Cython.Distutils

Я просмотрел несколько десятков случаев ошибок импорта, прочитал об импорте и упаковках и т. Д., Но не может показаться, что это понятно. Я сейчас на два-два дня застрял на этом, поэтому считаю, что пришло время попросить о помощи!

Библиотека называется zenlib. Я думаю, что проблема может быть связана с тем фактом, что я использую Enthought Python Distribution, который я установил заранее, вместо использования Python2.7, который поставляется с Ubuntu 12.04.

Более фон: Вот именно то, что я получаю при попытке запустить setup.py:

[email protected]:~/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 и не питон, который пришел с Ubuntu является то, что по умолчанию запускается, предваряя мой Баш переменную $ PATH среды на редактирование ~/.bashrc, добавив в качестве последней строки:

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

и действительно which python выплевывает /usr/local/epd/bin/python ... не зная, что еще попробовать, я вошел в мой каталог пакетов сайт (/usr/local/epd/lib/python2.7/site-packages) и дать полные права (г , w, x) до Cython, Distutils, build_ext.py и __init__.py. Наверное, глупо пытаться, и ничего не изменилось.

Не могу придумать, что попробовать дальше !? Есть идеи?

+0

Я не могу думать ни о чем, но то, что в вашем 'sys.path' ? –

+2

делает 'sudo python -c 'импорт Cython.Distutils'' работы? – jfs

+0

Мой эксперимент дал тот же результат, я устанавливаю Python 2.7 на ubuntu 12-04, cython, numpy, scipy. Такая же ошибка Traceback (последний последний вызов): Файл «setup.py», строка 4, в от Cython.Distutils import build_ext ImportError: Нет модуля с именем Cython.Distutils. Кажется, что ни один из ответов не разрешил это. Уважаемые эксперты! – pythOnometrist

ответ

12

Ваш Судо не получает правильный питона. Это известное поведение sudo в Ubuntu. См. Это question для получения дополнительной информации. Вы должны убедиться, что Судо называет право питона, либо используя полный путь:

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

или выполнив следующие действия (в Баш):

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

Прошло некоторое время с тех пор, как я разместил этот вопрос, но это действительно так, как я решил проблему. Более недавняя статья напомнила мне, что она все еще открыта. Используйте предложение @ user91279, чтобы найти правильный путь для вас. –

1

В CLI-питона, импорт SYS и посмотреть, что внутри sys.path
Тогда попробуйте использовать export PYTHONPATH=whatyougot

-1

Просто установите Cython от http://cython.org/#download и установить его с помощью этой команды

sudo python setup.py install 

Затем запустите команду

sudo python -c 'import Cython.Distutils' 

и он будет установлен, и сообщение об ошибке исчезнет.

4

У меня есть только один совет для вас: Создайте virtualenv. Это гарантирует, что у вас есть только одна версия python и все ваши пакеты, установленные локально (а не на всей вашей системе).
Должно быть одним из решений.

8

Run

which python

Вот путь к питону, что ваша система дефолту слишком затем перейти к методу @ Тьягу о:

sudo <output of which python> setup.py install

52

Установка Cython:

pip install cython 
+0

Это сработало для меня, но не для последней версии cython [0.22], но для предыдущей версии 0.21.2 – dhilipsiva

0

Это просто.

Сначала вы можете попробовать install cython.

Он обновит ваш easy_install, встроенный в python.

3

Для использования Python3

sudo apt-get install cython3 

Для использования python2

sudo apt-get install cython 

Подробности можно прочитать на this