Importar el módulo de Python NO en la ruta

Tengo un módulo foo, que contiene util.py y bar.py.

Quiero importarlo en sesión IDLE o python. ¿Cómo hago para esto?

No pude encontrar documentación sobre cómo importar módulos que no estén en el directorio actual o en la ruta de acceso de python predeterminada. Después de intentar import "/foo/util.py" , y from "" import util

Lo más cerca que pude conseguir fue

 import imp imp.load_source('foo.util','C:/.../dir/dir2/foo') 

Lo que me dio Permiso denegado en Windows 7.

Una forma es simplemente enmendar su camino :

 import sys sys.path.append('C:/full/path') from foo import util,bar 

Tenga en cuenta que esto requiere que foo sea un paquete de Python, es decir, que contenga un archivo __init__.py . Si no desea modificar sys.path , también puede modificar la variable de entorno PYTHONPATH o instalar el módulo en su sistema . Tenga en cuenta que esto significa que otros directorios o archivos .py en ese directorio pueden cargarse inadvertidamente.

Por lo tanto, es posible que desee utilizar imp.load_source en imp.load_source lugar. Necesita el nombre del archivo, no un directorio (a un archivo que el usuario actual puede leer):

 import imp util = imp.load_source('util', 'C:/full/path/foo/util.py') 

Puede personalizar la ruta de búsqueda del módulo utilizando la variable de entorno PYTHONPATH , o modificar manualmente la lista de directorios sys.path .

Consulte la documentación de la ruta de búsqueda de módulos en python.org.

Prueba esto

 import sys sys.path.append('c:/.../dir/dir2') import foo 

Siguiendo la punta del phihag, tengo esta solución. Solo load_src la ruta de un archivo fuente a load_src y se cargará. También debe proporcionar un nombre, por lo que puede importar este módulo utilizando este nombre. Prefiero hacerlo de esta manera porque es más explícito:

 def load_src(name, fpath): import os, imp return imp.load_source(name, os.path.join(os.path.dirname(__file__), fpath)) load_src("util", "../util.py") import util print util.method() 

Otra forma (menos explícita) es esta:

 util = load_src("util", "../util.py") # "import util" is implied here print util.method() # works, util was imported by the previous line 

Editar: el método se reescribe para que sea más claro.