Pregunta Cómo acceder a las variables __init__.py desde partes más profundas de un paquete


Me disculpo por otro __init__.py pregunta.

Tengo la siguiente estructura de paquete:

+contrib
  +--__init__.py
  |
  +database
      +--__init__.py
      |
      +--connection.py

En el nivel superior __init__.py Yo defino: USER='me'. Si yo import contrib desde la línea de comando, entonces puedo acceder contrib.USER.

Ahora, quiero acceder contrib.user de Withih connection.py pero no puedo hacerlo.

El nivel superior __init__.py se llama cuando emite from contrib.database import connection, entonces Python realmente está creando el parámetro USER.

Entonces la pregunta es: cómo acceder a los parámetros y variables declarados en el nivel superior __init__.py desde dentro del niños.

Gracias.

EDITAR:

Me doy cuenta de que puedes agregar import contrib a connection.py, pero parece repetitivo, ya que es obvio (¿incorrectamente?) que si necesitas connection.py ya importaste contrib.


8
2018-05-18 19:36


origen


Respuestas:


Añadiendo import contrib a connection.py es el camino a seguir. Sí el contrib el módulo ya está importado (puede averiguarlo desde sys.modules) El problema es que no hay referencia al módulo desde su código en connection.py. Hacer otra importación le dará la referencia. No necesita preocuparse por el tiempo de carga adicional porque el módulo ya está cargado.


12
2018-05-18 19:55



Necesita importar contrib en connection. Utilice una importación relativa (..contrib) o una importación absoluta.


0
2018-05-18 19:53