Qu'est-ce qu'un . dans une instruction d'importation en Python signifie?


141

Je regarde le code du multiprocessingmodule de Python , et il contient cette ligne:

from ._multiprocessing import win32, Connection, PipeConnection

au lieu de

from _multiprocessing import win32, Connection, PipeConnection

la différence subtile étant la période précédente _multiprocessing. Qu'est-ce que ça veut dire? Pourquoi cette période?


3
Cela s'appelle l'importation relative: docs.python.org/tutorial/modules.html
Aillyn

Sans le ., si vous aviez un fichier _multiprocessing.pypour une raison indéchiffrable à côté de votre script principal, il multiprocessingse briserait. Avec le ., il s'assure de disposer de son propre module.
Chris Morgan le

Si a .fait référence à des modules homologues, pourquoi la documentation dirait-elle d'utiliser a .alors que ce module multiprocesseur devrait faire partie des bibliothèques sys.path régulières? La question et la clarification de Chris les confondent-elles ou est-ce que je ne comprends pas? Appréciez l'aide.
rfii le

Réponses:


120

C'est la nouvelle syntaxe pour les importations relatives explicites . Cela signifie importer depuis le package actuel.


26
Qu'est-ce qui définit ce qu'est le «package actuel»?
fraxture

7
Il devrait indiquer d'où provient le package d'importation . Cela signifie essentiellement l'espace de noms actuel ou le répertoire du package.
Keith

2
Merci, je pense que je sais ce que tu veux dire. Pour être clair, pourriez-vous donner un exemple?
fraxture

11
Vous pouvez faire des choses comme:from . import peermodule from .. import parentpackagemodule
Keith

2
@bmc Une bonne façon d'apprendre est de mettre en place une petite expérience et de l'essayer vous-même. ;-)
Keith

22

Le point dans le nom du module est utilisé pour l'importation relative du module (voir ici et ici , section 6.4.2).

Vous pouvez utiliser plusieurs points, ne faisant pas référence au package actuel mais à ses parents. Cela ne doit être utilisé que dans les packages, dans le module principal, il faut toujours utiliser des noms de module absolus.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.