Estoy desarrollando / probando un paquete en mi directorio local. Quiero importarlo en el intérprete (v2.5), pero sys.path no incluye el directorio actual. Ahora mismo escribo sys.path.insert(0,'.')
. ¿Existe una forma mejor?
También,
from . import mypackage
falla con este error:
ValueError: Attempted relative import in non-package
Respuestas:
Puede usar importaciones relativas solo desde un módulo que a su vez fue importado como parte de un paquete; su script o intérprete interactivo no lo fue, así que, por supuesto
from . import
(lo que significa "importar desde el mismo paquete del que lo importé") no no funciona.import mypackage
va a estar bien una vez que se asegura el directorio padre demypackage
está ensys.path
(cómo le hizo para obtener su directorio actual de distancia desys.path
no sé - ¿tienes algo extraño en site.py, o ...)De hecho, para recuperar su directorio actual
sys.path
no hay mejor manera que ponerlo allí.fuente
Consulte la documentación de sys.path:
http://docs.python.org/library/sys.html#sys.path
Citar:
Por lo tanto, no es necesario manipular sys.path si está iniciando el intérprete de Python desde el directorio que contiene su módulo.
Además, para importar su paquete, simplemente haga:
import mypackage
Dado que el directorio que contiene el paquete ya está en sys.path, debería funcionar bien.
fuente
sys.path
lo que los archivos deben encontrarse antes que los archivos en cualquier otro lugar del entorno de trabajo.sys.path.insert(0, new_path)
lugar desys.path.append(new_path)
.Si desea ejecutar un script de Python sin modificar para que importe bibliotecas de un directorio local específico, puede configurar la
PYTHONPATH
variable de entorno, por ejemplo, en bash:Si solo desea que se importe desde el directorio de trabajo actual, use la
.
notación:fuente
Mantenlo simple:
try: from . import mymodule # "myapp" case except: import mymodule # "__main__" case
fuente
Una manera simple de hacer que el trabajo es ejecutar la secuencia de comandos desde el directorio padre usando pitón de
-m
bandera, por ejemplopython -m packagename.scriptname
. Obviamente, en esta situación, necesita un__init__.py
archivo para convertir su directorio en un paquete.fuente
Dentro de un paquete si hay setup.py , es mejor instalarlo
fuente
El uso ya
sys.path
debería incluir el directorio actual.Tratar:
import .
o:
from . import sth
sin embargo, puede que no sea una buena práctica, así que ¿por qué no usar simplemente:
import mypackage
fuente
Un poco tarde para la fiesta, pero esto es lo que funcionó para mí:
>>> import sys >>> sys.path.insert(0, '')
Aparentemente, si hay una cadena vacía, Python sabe que debería buscar en el directorio actual. No tenía la cadena vacía
sys.path
, lo que causó este error.fuente
Solía
pathlib
agregar el directorio de mi módulo a la ruta de mi sistema porque quería evitar instalar el módulo como un paquete y la respuesta de @maninthecomputer no me funcionóimport sys from pathlib import Path cwd = str(Path(__file__).parent) sys.path.insert(0, cwd) from my_module import my_function
fuente