Importación de módulos desde la carpeta principal

Estoy utilizando Python 2.5.

Este es mi árbol de carpetas:

ptdraft/
  nib.py
  simulations/
    life/
      life.py

(También tengo __init__.py en cada carpeta, omitido aquí para facilitar la lectura)

¿Cómo puedo importar el módulo nib desde dentro del módulo life? Espero que sea posible hacerlo sin tener que manipular sys.path.

Nota: El módulo principal que se ejecuta está en la carpeta ptdraft.

Podría utilizar importaciones relativas (python >= 2.5):

from ... import nib

(Lo nuevo en Python 2.5) PEP 328: Importaciones absolutas y relativas

EDIT: añadido otro punto '.' para subir dos paquetes

Comentarios (10)
Solución

Parece que el problema no está relacionado con que el módulo esté en un directorio padre o algo así.

Tienes que añadir el directorio que contiene ptdraft a PYTHONPATH

Dijiste que import nib funcionaba contigo, eso probablemente significa que añadiste el propio ptdraft (no su padre) a PYTHONPATH.

Comentarios (2)

Si añadir tu carpeta de módulos al PYTHONPATH no ha funcionado, puedes modificar la lista sys.path de tu programa donde el intérprete de Python busca los módulos a importar, dice la documentación de python:

Cuando se importa un módulo llamado spam, el intérprete busca primero un módulo incorporado con ese nombre. Si no lo encuentra, entonces busca un archivo llamado spam.py en una lista de directorios dada por la variable sys.path. sys.path se inicializa a partir de estas ubicaciones:

el directorio que contiene el script de entrada (o el directorio actual).

  • PYTHONPATH (una lista de nombres de directorios, con la misma sintaxis que la variable PATH del shell).
  • el valor por defecto dependiente de la instalación.

Después de la inicialización, los programas Python pueden modificar sys.path. El directorio que contiene el script que se está ejecutando se coloca al principio de la ruta de búsqueda, por delante de la ruta de la biblioteca estándar. Esto significa que los scripts en ese directorio se cargarán en lugar de los módulos del mismo nombre en el directorio de la biblioteca. Esto es un error a menos que se pretenda la sustitución.

Sabiendo esto, puede hacer lo siguiente en su programa:

import sys
# Add the ptdraft folder path to the sys.path list
sys.path.append('/path/to/ptdraft/')

# Now you can import your module
from ptdraft import nib
# Or just
import ptdraft
Comentarios (3)