Que hace un . en una declaración de importación en Python significa?

141

Estoy revisando el código del multiprocessingmódulo de Python , y contiene esta línea:

from ._multiprocessing import win32, Connection, PipeConnection

en vez de

from _multiprocessing import win32, Connection, PipeConnection

La sutil diferencia es el período anterior _multiprocessing. Qué significa eso? ¿Por qué el periodo?

Vlad el Impala
fuente
3
Se llama importación relativa: docs.python.org/tutorial/modules.html
Aillyn
Sin el ., si tuviera un archivo _multiprocessing.pypor alguna razón indescifrable junto a su script principal, multiprocessingse rompería. Con el ., se asegura de que tenga su propio módulo.
Chris Morgan
Si a se .refiere a módulos pares, ¿por qué la documentación dice que se use a .cuando ese módulo de multiprocesamiento debe formar parte de las bibliotecas regulares sys.path? ¿La pregunta y la aclaración de Chris los mezclan o no lo entiendo? Agradezco la ayuda.
rfii

Respuestas:

120

Esa es la nueva sintaxis para las importaciones relativas explícitas . Significa importar del paquete actual.

Keith
fuente
26
¿Qué define qué es el "paquete actual"?
fraxture el
77
Debería decir de dónde está el paquete de importación . Básicamente significa el espacio de nombres actual o el directorio del paquete.
Keith
2
Gracias, creo que sé a qué te refieres. Para ser claros, ¿te importaría dar un ejemplo?
fraxture
11
Puedes hacer cosas como:from . import peermodule from .. import parentpackagemodule
Keith
2
@bmc Una buena forma de aprender es realizar un pequeño experimento y probarlo usted mismo. ;-)
Keith
22

El punto en el nombre del módulo se usa para la importación relativa del módulo (ver aquí y aquí , sección 6.4.2).

Puede usar más de un punto, refiriéndose no al paquete actual sino a su (s) padre (s). Esto solo debe usarse dentro de los paquetes, en el módulo principal siempre se deben usar nombres de módulo absolutos.

Martin Gunia
fuente