web-dev-qa-db-fra.com

ImportError: Aucun module nommé Cython.Distutils

Je rencontre un problème étrange lorsque j'essaie d'installer la bibliothèque Python zenlib, à l'aide de son fichier setup.py. Lorsque j’exécute le fichier setup.py, une erreur d’importation s’affiche: 

ImportError: Aucun module nommé Cython.Distutils`

mais j'ai un tel module, et je peux l'importer sur la ligne de commande python sans problème. Pourquoi est-ce que je risque de recevoir cette erreur d'importation?

Je pense que le problème tient peut-être au fait que j'utilise Enthought Python Distribution , que j’ai installé juste avant, au lieu d’utiliser Python 2.7 fourni avec Ubuntu 12.04.

Plus d’arrière-plan: Voici exactement ce que j’obtiens en essayant d’exécuter 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

Mais cela fonctionne à partir de la ligne de commande:

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

Notez que la première importation a fonctionné et que la seconde génère une erreur. Comparez ceci aux premières lignes de 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

Je me suis assuré que la distribution Python Enthought et non le python fourni avec Ubuntu est ce qui est exécuté par défaut en ajoutant ma variable d'environnement bash $ PATH en éditant ~/.bashrc, en l'ajoutant à la dernière ligne:

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

et en effet which python crache /usr/local/epd/bin/python... ne sachant pas quoi essayer d'autre, je suis allé dans le répertoire des paquets de mon site (/usr/local/epd/lib/python2.7/site-packages) et ai donné toutes les autorisations (r, w, x) aux Cython, Distutils, build_ext.py et aux fichiers __init__.py. Probablement idiot d'essayer, et cela n'a rien changé.

Vous ne pouvez pas penser à quoi essayer ensuite !? Des idées?

48
Edward Newell

Votre Sudo ne reçoit pas le bon python. C'est un comportement connu de Sudo sous Ubuntu. Voir cette question pour plus d’informations. Vous devez vous assurer que Sudo appelle le bon python, soit en utilisant le chemin complet:

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

ou en procédant comme suit (en bash):

alias Sudo='Sudo env PATH=$PATH'
Sudo python setup.py install
17
tiago

Installez Cython:

pip install cython
66
Martin Thoma

Courir 

which python

C'est le chemin d'accès au python par défaut de votre système Ensuite, allez à la méthode de @ tiago: 

Sudo <output of which python> setup.py install

8
ashley

Pour python3 utiliser

Sudo apt-get install cython3

Pour python2

Sudo apt-get install cython

Les détails peuvent être lus à this

6

Je n'ai qu'un seul conseil pour vous: créer un serveur virtuel. Cela garantira que vous n’avez qu’une version de Python et tous vos packages installés localement (et non sur l’ensemble du système).
Devrait être l'une des solutions.

5
Depado

Dans l'interface CLI-python, importez sys et regardez ce qu'il y a à l'intérieur de sys.path
Ensuite, essayez d'utiliser export PYTHONPATH=whatyougot

1
lolopop

C'est facile. 

Vous pouvez essayer le paquet install cython en premier.

Il mettra à jour votre easy_install construit en python.

0
ian

A couru à nouveau dans les temps modernes. La solution était simple:

pip uninstall cython && pip install cython
0
Brad Pitcher

L'exécution des commandes suivantes a résolu le problème pour moi dans 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

Ce lien m'a aidé: https://github.com/trezor/python-trezor/issues/40

0
N. S.