Saltar al contenido

importar un paquete desde otro paquete en python

Al fin luego de tanto batallar pudimos hallar el resultado de esta traba que agunos usuarios de nuestro sitio han presentado. Si deseas compartir algún dato no dudes en dejar tu información.

Solución:

Gracias mguijarr.

Encontré una solución aquí en stackoverflow: fuente: Cómo arreglar “Intento de importación relativa en no paquete” incluso con __init__.py

cuando estoy en la carpeta del proyecto/proyecto, puedo llamar al módulo así:

python -m packages.files.fileHash (no .py here, because it is a package)

Esto está funcionando bien. En este caso, se conoce PYTHONPATH y la importación puede verse así:

from packages.files import fileChecker

Si no se llama directamente, sino desde el directorio del paquete en mi caso /packages/hasher –> se necesita configurar PYTHONPATH:

if __package__ is None:
    import sys
    from os import path
    sys.path.append( path.dirname( path.dirname( path.abspath(__file__) ) ) )
    from packages.files import fileChecker
else:
    from packages.files import fileChecker

Lo importante para mí aquí es que la ruta a incluir es la ruta PROYECTO.

El fragmento de código anterior (el último) ya incluye el caso que describe ambos casos (llamados como paquete y directamente).

Muchas gracias por tu ayuda.

Actualizar:

  1. Solo para hacer mi respuesta más completa.

Python agrega la ruta actual a PYTHONPATH automáticamente al hacer

python fileHash.py

Otra opción, además de la anterior, es configurar PYTHONPATH al ejecutar el programa de esta manera

PYTHONPATH=/path/to/project python fileHash.py
  1. Obtuve algo de experiencia, me gustaría compartir:

    • Ya no ejecuto módulos desde sus directorios.
    • Iniciar la aplicación, ejecutar pruebas o sphinx o pylint o lo que sea, todo se hace desde el directorio del proyecto.
    • Esto garantiza que el directorio del proyecto esté contenido en la ruta de python y que todos los paquetes y módulos se encuentren sin hacer cosas adicionales en las importaciones.
    • El único lugar en el que sigo configurando la ruta de python a la carpeta del proyecto usando sys.path es en mi setup.py para que el código funcione.

Aún así, en mi opinión, esto de alguna manera no es un asunto fácil y me encuentro reflejando el PYTHONPATH con bastante frecuencia 🙂

Te mostramos comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *