Problema de import pode acontecer a partir de "onde" você está chamando o módulo.
Quando você vai fazer um import no python, você chama por um módulo que este deve estar definido em algum lugar. Por exemplo:
o caminho que fica a classe Conta está em /home/samir/alura/conta_test/conta.py.
Quando eu chamo pelo interpretador do python ($python), eu preciso me atentar a onde eu chamei, por exemplo:
No python da esquerda, está sendo executado em /home/samir/alura, já o da direita está em /home/samir/alura/conta
se eu simplesmente tentar importar com "from conta import Conta":
Isso acontece porque ao usar "from conta", o interpretador procura por um módulo chamado "conta" e, no caso da esquerda, não tem como encontrar esse módulo. Já na direita, o módulo "conta" vai estar no mesmo lugar em que o interpretador está sendo executado.
Mas se eu realmente quiser importar a classe Conta executando de fora da pasta conta_test? Isso é algo bastante comum em projetos.
Essa é uma das formas que você pode chamar pela classe Conta a partir de um diretório acima. Quando você passa from conta_test.conta, o python vai entender que é para ele entrar na pasta "conta_test" e procurar pelo módulo conta, quando encontrar, importar a classe Conta.
Vamos para a estrutura primeiro:
Uma outra forma é usando um init.py para indicar ao python que o diretório é um módulo (e até facilitar na digitação)
E o conteúdo do init pode ser bem customizável (ou até vazio, mas você e seu time vão querer que você escreva algo), mas eu escrevi de uma forma:
E, por fim:
Aqui eu fiz dois imports para você ver que posso importar o módulo como ele se chama, ou posso até apelidá-lo. Fica a seu critério.
obs:
Para o python, tem total diferença ao falar sobre scripts (brutamente falando: Aqueles que você excuta diretamente com o interpretador, ex "python hello_world.py") e módulos (se quiser uma resposta completa: https://stackoverflow.com/questions/14132789/relative-imports-for-the-billionth-time/14132912#14132912).