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.