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?


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.