example - import*python
Importar el módulo de python NO en la ruta (4)
Dale una oportunidad
import sys
sys.path.append(''c:/.../dir/dir2'')
import foo
Tengo un módulo foo, que contiene util.py y bar.py.
Quiero importarlo en la sesión IDLE o python. ¿Cómo hago esto?
No pude encontrar documentación sobre cómo importar módulos que no están en el directorio actual o en la RUTA predeterminada de python. Después de intentar import "<full path>/foo/util.py"
, y from "<full path>" import util
Lo más cerca que podía estar era
import imp
imp.load_source(''foo.util'',''C:/.../dir/dir2/foo'')
Lo cual me dio Permiso denegado en Windows 7.
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 del módulo en python.org.
Siguiendo la sugerencia de Phihag, tengo esta solución. Simplemente dé la ruta de un archivo fuente a load_src
y lo cargará. También debe proporcionar un nombre, para que pueda importar este módulo con 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 hacerlo más claro.
Una forma es simplemente modificar su path :
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 de 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'')