Olá Emanuel,
Tudo bem? Certo, o Python trabalha imports da seguinte forma:
- Verifica se o módulo existe no sys.modules (que é um cache de módulos importados anteriormente).
- Se não encontrar verifica nos módulos incorporados (built-in) (ex. math, string, etc).
- Se ainda assim não encontrar ele procura na lista de diretórios definido por sys.path, que normalmente leva a procurar primeiro na pasta atual do script que está sendo chamado.
É importante notar que além disso no python você pode fazer imports relativos ao diretório atual para isso você pode fazer o seguinte:
# Dada a seguinte estrutura
# |__ Pasta Projeto
# |__ lib
# | |__ meumodulo.py
# |__ app
# |__ meuprograma.py
# |__ config.py
#
# assumindo que estamos no meu programa.py
# podemos importar o config e o meumodulo da
# seguinte forma:
from .config import configs
from ..lib.meumodulo import algodomodulo
# neste caso o "." na frente do modulo indica para
# procurar no mesmo diretório,
# enquanto o ".." faz com que a busca começe de
# um diretório acima na arvore de diretórios.
#
# Como falei na explicação acima o sys.path é
# consultado também, então você poderia adicionar o
# diretório que contem a classe ao sys.path antes de
# importar-lo, ex:
import sys
sys.path.append('/caminho/para/o/modulo')
import modulodocaminho
# Se você quiser consultar os diretórios presentes no
# sys.path você pode usar o seguinte código:
import sys
print(sys.path)
A resposta curta para sua questão então é que o interpretador python não sabia onde encontrar seus arquivos, e ao mover para a outra pasta você colocou eles na pasta do script que estava sendo executado, que por sua vez é adicionado ao sys.path daquela seção de execução pelo interpretador python quando você inicia a execução do script.
Espero ter respondido sua dúvida.