7 votes

Imports absolus en python ne fonctionnent pas, les imports relatifs fonctionnent

Je n'arrive pas à faire fonctionner les imports absolus en python. Voici ma structure de fichiers :

a/
  b/
    __init__.py
  __init__.py
  foo.py

foo.py :

# Including or removing the __future__ import has no effect
from __future__ import absolute_import
from a import b  # just `import b` works fine
print "success!"

Je reçois plutôt :

ImportError: No module named a

Que se passe-t-il ici ? J'ai l'impression de passer à côté de quelque chose de basique. Bien que cet exemple soit trivial, j'ai besoin que les imports absolus fonctionnent pour le vrai projet, donc remplacer l'import par un import relatif n'est pas une option. J'utilise python 2.7.13

Aucune des solutions répertoriées ici n'aide

Merci d'avance pour toute aide !

8voto

Anthony Sottile Points 3629

Étant donné que ce n'est pas montré, je dois supposer que vous exécutez python a/foo.py, cela place le répertoire du script ('a') au début de sys.path alors qu'en réalité vous voulez que le répertoire actuel soit au début de sys.path.

Vous devriez plutôt exécuter python -m a.foo ce qui initialisera correctement les racines de sys.path pour la structure de votre projet.

Voici un exposé plus détaillé que j'ai écrit sur d'autres façons dont ce même problème peut mal tourner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X