2010-05-18 12 views
8

Pido disculpas por otra pregunta más __init__.py.Cómo acceder a las variables __init__.py desde partes más profundas de un paquete

I tienen la siguiente estructura del paquete:

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

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

Ahora, quiero acceder contrib.user desde withih connection.py pero no puedo hacerlo.

Se llama al nivel superior __init__.py cuando emite from contrib.database import connection, por lo que 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 dentro de los niños.

Gracias.

EDIT:

Soy consciente de que se puede añadir a import contribconnection.py, pero parece repetitivo, como es obvio (de manera incorrecta?) Que si necesita connection.py ya importó contrib.

Respuesta

12

Agregando import contrib a connection.py es el camino a seguir. Sí, el módulo contrib ya está importado (puede encontrarlo en 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.

+0

En teoría, podría obtenerlo de 'sys.modules', ya que sabe que está allí, pero * le recomiendo * que no lo haga. La respuesta de Wai Yip Tung es mucho mejor. – Kevin

0

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

Cuestiones relacionadas