web-dev-qa-db-fra.com

Comment importer à partir d'un fichier dans le répertoire courant dans Python 3?

Dans python 2 je peux créer un module comme celui-ci:

parent
->module
  ->__init__.py (init calls 'from file import ClassName')
    file.py
    ->class ClassName(obj)

Et ça marche. Dans python 3 je peux faire la même chose à partir de l'interpréteur de commandes et cela fonctionne (modifier: Cela a fonctionné parce que j'étais dans le même répertoire exécutant l'interpréteur). Cependant, si je crée __ init __. py et faites la même chose comme ceci:

"""__init__.py"""
from file import ClassName

"""file.py"""
class ClassName(object): ...etc etc

J'obtiens ImportError: impossible d'importer le nom 'ClassName', il ne voit pas du tout 'file'. Il le fera dès que j'importerai le module même si je peux tout importer en le référençant directement (ce que je ne veux pas faire car il est totalement incohérent avec le reste de notre base de code). Ce qui donne?

15
user5076297

Dans python 3 toutes les importations sont absolues sauf si un chemin relatif est donné pour effectuer l'importation depuis. Vous devrez soit utiliser une importation absolue ou relative.

Importation absolue:

from parent.file import ClassName

Importation relative:

from . file import ClassName
# look for the module file in same directory as the current module
26
Dunes

Essayez de l'importer de cette façon:

from .file import ClassName

Voir ici plus d'informations sur la "décision de Guido" sur les importations dans python 3 et un exemple complet sur la façon d'importer dans python 3.

17
doru