3
respostas

Importar codigos externos

Boa tarde, estou tentando importar um codigo para usar suas classes e métodos mas, quando faço isto ele fica me dando erro na DAG

"Broken DAG: [/opt/airflow/dags/Implemaster.py]
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/opt/airflow/dags/Implemaster.py", line 8, in <module>
    from producao import implemaster
ModuleNotFoundError: No module named 'producao'"
já incluí uma pasta chamada producao no compose

  volumes:
    - ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
    - ${AIRFLOW_PROJ_DIR:-.}/producao:/opt/airflow/producao
    - ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
    - ${AIRFLOW_PROJ_DIR:-.}/config:/opt/airflow/config
    - ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins

mas criei um arquivo init.py na pasta e nada dá certo.

3 respostas

Oii, Gabriel! Tudo bem?

O erro indica que Python não consegue encontrar o módulo producao ao ser importado no script Airflow. Você está no caminho certo, criando o arquivo __init__.py. Porém, só isso pode não ser suficiente se o Python não estiver reconhecendo o caminho até esse diretório.

Uma possível solução é garantir que o diretório producao esteja no PYTHONPATH do ambiente onde o Airflow está rodando. Você pode fazer isso adicionando uma linha de código no início do seu script Implemaster.py para incluir explicitamente o caminho até o diretório producao. Segue um exemplo:

import sys
sys.path.insert(0, "/opt/airflow/producao")

from producao import implemaster

Neste exemplo acima, é adicionado o diretório producao ao início do PYTHONPATH, o que deve permitir que o Python encontre os módulos dentro dele.

Além disso, verifique se o volume está montado corretamente no Docker Compose, como você configurou. Às vezes, erros de digitação ou caminhos incorretos podem causar problemas. Revise se o caminho que indica para o diretório producao condiz, no seu sistema local.

Espero que as sugestões te ajude. Qualquer dúvida, conte conosco.

Bons estudos, Gabriel!

Olá, obrigado pelo retorno mas não deu certo. Vou compartilhar o codigo quem sabe fiz algo errado.

from airflow.models import DAG
from airflow.utils.dates import days_ago
from airflow.operators.empty import EmptyOperator
from airflow.operators.bash import BashOperator
from airflow.operators.python import PythonOperator
import pendulum
import sys

sys.path.insert(0, "/opt/airflow/producao")

from producao import implemaster

with DAG(
    'Implemaster',
    start_date=pendulum.datetime(2024, 5, 9, tz="UTC"),
    schedule_interval='@daily'
) as dag:
    
    tarefa_1 = PythonOperator(
        task_id = 'Extrair_Dados',
        python_callable=implemaster.Imbaud().clifor()
    )

    tarefa_1

Olá! este script está fazendo uma conexão com o firebird! será que é por isto ?