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?
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
Installez Cython:
pip install cython
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
Pour python3 utiliser
Sudo apt-get install cython3
Pour python2
Sudo apt-get install cython
Les détails peuvent être lus à this
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.
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
C'est facile.
Vous pouvez essayer le paquet install cython
en premier.
Il mettra à jour votre easy_install construit en python.
A couru à nouveau dans les temps modernes. La solution était simple:
pip uninstall cython && pip install cython
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