Python ImportError: Cython.Distutils
У меня возникла странная проблема при попытке установить библиотеку python с помощью файла setup.py. когда я запускаю файл setup.py, я получаю ошибку импорта, говоря ImportError: No module named Cython.Distutils
, но у меня есть такой модуль, и я могу без проблем импортировать его в командной строке python. Почему я могу получить эту ошибку импорта?
Я просмотрел несколько десятков случаев ошибок импорта, прочитал об импорте и пакетах и т.д., но, похоже, не понял этого. Я сейчас на два-два дня застрял в этом месте, поэтому я рассчитываю на время попросить о помощи!
Библиотека называется 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 Distribution, а не питон, который поставляется с Ubuntu, - это то, что запускается по умолчанию, добавляя переменную среды bash $PATH, редактируя ~/.bashrc
, добавляя это как последнюю строку:
export PATH=/usr/local/epd/bin:$PATH
и действительно which python
выскакивает /usr/local/epd/bin/python
... не зная, что еще попробовать, я зашел в каталог моих пакетов пакетов (/usr/local/epd/lib/python2.7/site-packages
) и дал полные разрешения (r, w, x) до Cython
, Distutils
, build_ext.py
и __init__.py
. Наверное, глупо пытаться, и ничего не изменилось.
Не могу придумать, что попробовать дальше!? Любые идеи?
Ответы
Ответ 1
Ваше sudo не получает правильный питон. Это известное поведение sudo в Ubuntu. Для получения дополнительной информации см. question. Вы должны убедиться, что sudo вызывает правильный питон, либо используя полный путь:
sudo /usr/local/epd/bin/python setup.py install
или выполнив следующее (в bash):
alias sudo='sudo env PATH=$PATH'
sudo python setup.py install
Ответ 2
Установите Cython:
pip install cython
Ответ 3
Запустить
which python
Это путь к питону, который ваша система тоже не выполняла.
затем перейдите к методу @tiago:
sudo <output of which python> setup.py install
Ответ 4
У меня есть только один совет для вас: Создайте virtualenv. Это гарантирует, что у вас есть только одна версия python и все ваши пакеты установлены локально (а не на всей вашей системе).
Должно быть одним из решений.
Ответ 5
Для использования python3
sudo apt-get install cython3
Для использования python2
sudo apt-get install cython
Подробности можно прочитать на этом
Ответ 6
В CLI-python импортируйте sys и посмотрите, что внутри sys.path
Затем попробуйте использовать export PYTHONPATH=whatyougot
Ответ 7
Это легко.
Сначала вы можете попробовать пакет install cython
.
Он обновит ваш easy_install, встроенный в python.
Ответ 8
Просто установите Cython из
http://cython.org/#download
и установите его с помощью этой команды
sudo python setup.py install
Затем запустите команду
sudo python -c 'import Cython.Distutils'
и он будет установлен, и сообщение об ошибке исчезнет.