# Hola Mundo! + Consulta en lectura de módulo

**URL:** https://pyar.discourse.group/t/hola-mundo-consulta-en-lectura-de-modulo/724
**Category:** Sin categoría
**Created:** [20 Agosto, 2021 18:26 UTC](https://pyar.discourse.group/t/hola-mundo-consulta-en-lectura-de-modulo/724 "2021-08-20T18:26:19Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![echang](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/echang/32/319_2.png) [@echang](https://pyar.discourse.group/u/echang)
#### Post date: [20 Agosto, 2021 18:26 UTC](https://pyar.discourse.group/t/hola-mundo-consulta-en-lectura-de-modulo/724/1 "2021-08-20T18:26:19Z")

</div>

Hola! Como están?

Soy Eloy! Data Scientist de profesión y game designer de hobbie.

Me entere de este espacio gracias a una consulta a un Prof. y se las transfiero, estoy creando mi primer package en python el cual es un framework para data pipelines ([Normandy](https://pypi.org/project/normandy/)), la idea básica hasta ahora funciona, sin embargo cuando se requieren usar funciones definidas por el usuario no logro poder cargarlas a pesar de estar en el mismo path, y con el \_\_init\_\_ definido.

Aclaro un poco más:  
Tengo esta estructura de carpetas:  
test\_project/

- pipeline/
  - read/
    - read\_process.py

  - process/
    - data\_process.py

  - pipeline\_conf.yml

- tools/
  - functions.py
  - \_\_init\_\_.py

Siendo test\_project el path principal de mi proyecto.

Dentro de data\_process tengo:

```auto
from tools.functions import test_function

```

Lo cual me devuelve un error de que no se consigue el modulo “tools”. Verifique y estoy en el nivel de test\_project/.

Pueden ayudarme con este tema?

Quedo atento a cualquier comentario e información extra que necesiten.

Saludos.

---

<div class="post-metadata">

### Author: ![carlos.crespo](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/carlos.crespo/32/262_2.png) [@carlos.crespo](https://pyar.discourse.group/u/carlos.crespo)
#### Post date: [21 Agosto, 2021 12:00 UTC](https://pyar.discourse.group/t/hola-mundo-consulta-en-lectura-de-modulo/724/2 "2021-08-21T12:00:49Z")

</div>

Hola Eloy!  
según veo el problema está en que `functions.py` está algunos niveles “antes” que `data_process.py`.  
Fijate:  
pipeline → process → data\_process.py

tiene que hacer este camino:  
 ← pipeline ← test\_project  
 → tools → functions.py

(espero se entienda lo de las flechitas)  
Para que te funcione el `import` tal cual está, deberías mover `data_process.py` a `test_project/` y ahí si lo vas a importar sin problemas. Hacé la prueba 😛

Ahora bien, ¿cómo resolver de la mejor manera esto respetando la estructura de carpetas? Se lo dejo a los que sepan un poco más jej

Abrazo

---

<div class="post-metadata">

### Author: ![echang](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/echang/32/319_2.png) [@echang](https://pyar.discourse.group/u/echang)
#### Post date: [23 Agosto, 2021 13:17 UTC](https://pyar.discourse.group/t/hola-mundo-consulta-en-lectura-de-modulo/724/3 "2021-08-23T13:17:08Z")

</div>

Hola @carlos.crespo!

Muchas gracias por tu respuesta, sin embargo ese no es el problema, también lo pensé y de hecho probé colocando la carpeta `tools` dentro de la carpeta `process` pero de igual manera no funciono.

Explico un poco más sobre el packete Normandy, el mismo se ejecuta desde el directorio base (en este caso en `test_project/`) usando el comando

```auto
normandy --run-pipeline -tags foo

```

Luego, egún la configuración del `pipeline_conf.yml` y los tags que se coloquen, carga de cada archivo dentro de las sub carpetas en `pipeline` (En este caso serian `read/` y `process/`) una función llamada `process`.

Coloco el [link](https://github.com/echang1802/normandy) al repositorio del proyecto en caso de que quieras revisarlo más a fondo.

Quedo atento.

Saludos.

---

<div class="post-metadata">

### Author: ![echang](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/echang/32/319_2.png) [@echang](https://pyar.discourse.group/u/echang)
#### Post date: [26 Agosto, 2021 12:38 UTC](https://pyar.discourse.group/t/hola-mundo-consulta-en-lectura-de-modulo/724/4 "2021-08-26T12:38:29Z")

</div>

Buenas!

Logre solventar el problema usando `spec_from_file_location`, `module_from_spec` de `importlib`. Por alguna razón era necesario colocar el path completo, para esto cree una clase que sirva de interfaz con el usuario para poder usar sus modulos, la misma la pueden ver [aqui](https://github.com/echang1802/normandy/blob/0.3/src/normandy/engine/tools.py).

Definitivamente es algo que se puede mejorar por lo que cualquier sugerencia es bien recibida.

Saludos.
