Python: importe un módulo desde un directorio que no sea un paquete

Tengo una estructura de directorios como esta …

dir/ build.py dir2 dir3/ packages.py 

Ahora el build.py necesita packages.py – y tenga en cuenta que dir2 no es un paquete.

Entonces, ¿cuál es la mejor manera de obtener packages.py cargados en build.py (la estructura del directorio no se puede cambiar)

EDITAR

La solución sys.path.append parece buena, pero hay una cosa: necesito usar el archivo packages.py raramente, y mantener una sys.path que incluya un directorio que se usa raramente, pero está en la parte frontal – ¿Es eso lo mejor?

Editar II

Creo que la mejor solución es la mejor.

 import imp packages = imp.load_source('packages', '/path/to/packages.py') 

EDITAR III

para Python 3.x

Tenga en cuenta que imp.load_source y alguna otra función han quedado en desuso . Así que deberías usar el imp.load_module hoy.

 fp, pathname, description = imp.find_module('packages', '/path/to/packages.py') try: mod = imp.load_module('packages', fp, pathname, description) finally: # since we may exit via an exception, close fp explicitly if fp: fp.close() 

Podrías hacerlo:

 sys.path.append('./dir2/dir3') import packages 

O mejor aún:

 sys.path.append(os.path.join(os.path.dirname(__file__), 'dir2/dir3')) import packages 

O (tomado de aquí: ¿Cómo importar un módulo a la ruta completa? )

 import imp packages = imp.load_source('packages', '/path/to/packages.py') 

¿Sería la ‘una manera correcta’ de hacer la tercera? – Evita el desorden directamente con sys.path

Encuentro los mismos problemas, y los resuelvo.

 dir/ build.py dir2 dir3/ packages.py 
  1. agregue el archivo __init__.py en dir1, dir2, dir3 ...
  2. Dentro de una jerarquía de paquetes, use dos puntos .

bulid.py desea importar packages.py , escriba en bulid.py:

 import ..dir2.dir3.packages from ..dir2.dir3.packages import function 

https://docs.python.org/2/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

Importando módulos desde la carpeta padre

¿Cómo importar una clase de Python que está en un directorio de arriba?