2
respostas

[Dúvida] Hierarquia dos diretórios e o import

Percebi que ao longo tanto no arquivo main quando no arquivo de testes é usado o import da seguinte forma:

from codigo.bytebank import Funcionario

Entendo que se o main.py estiver na mesma pasta do arquivo bytebank uso apenas o 'bytebank' sem o 'codigo' na frente.

Por outro lado isso não funciona no arquivo de testes. Se eu deixo apenas o 'bytebank' ele não encontra o módulo por não estar na mesma pasta, e com o termo 'codigo' também não. O pytest até reconhece o arquivo e consegue executar os testes, mas quando executo o arquivo teste diretamente sem o pytest ele gera o seguinte erro:

ModuleNotFoundError: No module named 'codigo'

Então fiquei com as seguintes dúvidas:

Porque executando individualmente ocorre esse erro mesmo ocorrendo tudo bem com o pytest?

E segundo. Considerando que eu tenho uma pasta A e B lado a lado, como faço para importar um módulo da pasta A a partir de outro módulo dentro da pasta B?

2 respostas

Caso os arquivos estejam em pastas diferentes, você poderia passar o PATH (o local aonde a pasta se encontra) completo. Uma alternativa fácil para contornar esse problema seria:

  1. Abra o código, no qual você deseja fazer o import
  2. Na barra lateral, que apresenta os arquivos, clique com o botão esquerdo do mouse sobre "Copy relative PATH"
  3. Cole isso no import, substituindo as barras por ponto (.)

Exemplo:

from PATH_COPIADO import funcao

Estou enfrentando o mesmo problema, também não consegui fazer o import alterando o path como informado.

Precisei utilizar o sys e alterar o path:

import sys
sys.path.insert(1, 'D:/Users/Meu_Usuario/Documents/Alura/TDD/codigo/') 
from bytebank import Funcionario

e após isso executei pytest do terminal. Funcionou tanto da pasta test quanto da pasta TDD.

Se puder me ajudar a entender o motivo, será que fiz alguma coisa de errado?