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 mypackageva a estar bien una vez que se asegura el directorio padre demypackageestá ensys.path(cómo le hizo para obtener su directorio actual de distancia desys.pathno sé - ¿tienes algo extraño en site.py, o ...)De hecho, para recuperar su directorio actual
sys.pathno 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 mypackageDado que el directorio que contiene el paquete ya está en sys.path, debería funcionar bien.
fuente
sys.pathlo 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
PYTHONPATHvariable 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__" casefuente
Una manera simple de hacer que el trabajo es ejecutar la secuencia de comandos desde el directorio padre usando pitón de
-mbandera, por ejemplopython -m packagename.scriptname. Obviamente, en esta situación, necesita un__init__.pyarchivo para convertir su directorio en un paquete.fuente
Dentro de un paquete si hay setup.py , es mejor instalarlo
fuente
El uso ya
sys.pathdebería incluir el directorio actual.Tratar:
import .o:
from . import sthsin embargo, puede que no sea una buena práctica, así que ¿por qué no usar simplemente:
import mypackagefuente
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
pathlibagregar 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_functionfuente