Python para iniciantes: do zero ao primeiro projeto
Aprenda sobre variáveis, loops e funções e crie seu primeiro projeto Python em apenas 2 horas!
Ao trabalhar com Python, especialmente em um projeto com múltiplos arquivos, você frequentemente precisará importar funções ou classes de um arquivo para outro. Esse é um cenário comum quando você está tentando organizar seu código em módulos e pacotes. No entanto, você pode encontrar alguns erros ao tentar realizar importações relativas. Vamos entender por que isso acontece e como resolver.
No Python 3, você pode tentar importar uma função de outro arquivo no mesmo diretório usando um dos seguintes métodos:
from .mymodule import myfunctionou
from mymodule import myfunctionNo entanto, você pode se deparar com erros como ImportError: attempted relative import with no known parent package, ModuleNotFoundError: No module named 'mymodule', ou SystemError: Parent module '' not loaded, cannot perform relative import. Esses erros ocorrem porque o Python espera que o módulo faça parte de um pacote e, às vezes, o módulo precisa ser executável como um script.
Considere uma estrutura de projeto típica:
main.py
mypackage/
__init__.py
mymodule.py
myothermodule.pyEm mymodule.py, você pode ter uma função as_int e uma função de teste _test. Da mesma forma, myothermodule.py pode importar as_int de mymodule e definir sua própria função add com uma função de teste. O arquivo main.py então importaria add de myothermodule.
Essa configuração funciona bem quando você executa main.py ou mypackage/mymodule.py, mas falha com mypackage/myothermodule.py devido à importação relativa.
Para executar um script com importações relativas, você deve usar a opção -m e fornecer o caminho no sistema de módulos do Python:
python3 -m mypackage.myothermoduleEste método é um pouco verboso e não combina bem com uma linha shebang como #!/usr/bin/env python3.
Evite Importações Relativas: Use importações absolutas, como:
from mypackage.mymodule import as_intModifique o PYTHONPATH: Execute a partir do pai de mypackage ou adicione esse diretório ao PYTHONPATH. Alternativamente, você pode modificar o PYTHONPATH no código:
import sys
import os
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(SCRIPT_DIR))
from mypackage.mymodule import as_intDefina __package__ Manualmente: Se você está executando um script que faz parte de um pacote, você pode definir o atributo __package__ manualmente para permitir que as importações relativas funcionem.
Use Importações Absolutas e setuptools: Substitua importações relativas por importações absolutas e instale seu pacote usando setuptools. Isso torna seu pacote importável de qualquer lugar.
Código de Inicialização: Adicione o diretório pai do seu pacote ao sys.path antes de tentar importar qualquer coisa do pacote usando importações absolutas.
Embora as importações relativas explícitas sejam uma alternativa aceitável às importações absolutas, elas podem ser problemáticas quando a estrutura de arquivos é complexa ou quando o script é executado como o módulo principal. A PEP 8 recomenda o uso de importações absolutas pela sua legibilidade e melhor comportamento.
Em resumo, quando você encontra erros de importação no Python 3, isso geralmente se deve ao módulo não ser reconhecido como parte de um pacote ou ao script ser executado como o módulo principal. Para resolver isso, você pode usar importações absolutas, modificar o PYTHONPATH, definir o atributo __package__ manualmente ou usar setuptools para tornar seu pacote importável. Lembre-se de considerar a estrutura do seu projeto e escolher o método que melhor atenda às suas necessidades.
Aprenda sobre variáveis, loops e funções e crie seu primeiro projeto Python em apenas 2 horas!
Saia do zero e analise dados com Python e Pandas neste curso gratuito com certificado!
Aprenda a programar com Python e explore a inteligência artificial! Crie um chatbot prático que interage com seus próprios dados. Comece agora!
Estudo aprofundado do potencial de LLMs multimodais: soluções, mecanismos e geração de valor Os Modelos de Linguagem de Grande Porte (LLMs) multimodais representam uma…
Quando se trata de visualização de dados em Python, o Matplotlib é uma das bibliotecas mais populares e poderosas disponíveis. Para cientistas de dados,…
Ter um portfólio online é essencial para se destacar no mercado. Se você atua na área de dados, tecnologia ou negócios, apresentar seus projetos…
Comente e participe da conversa
Crie sua conta gratuita e compartilhe sua opinião nos comentários.
Entre para a Asimov