Viagens       https://pt.bhlyqj.com

Instrução `import` Python: Módulos, Namespaces e Boas Práticas

Em Python, import é como traz código de um módulo para outro. Não é "main import" — esse termo não existe em Python. Aqui está como realmente funciona, com padrões uso diário.

Sintaxe Básica Import

import nome_módulo

Isto carrega nome_módulo e vincula a variável no namespace atual. Acede conteúdos com notação ponto:


import math
math.sqrt(16) # 4.0
math.pi # 3.14159...

Padrões Import Comuns

1. Importar Módulo (Padrão Recomendado)


import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [1,2,3]})
arr = np.array([1,2,3])

Vantagens: Explícito, legível, evita conflitos nomes, mostra origem.

2. Importar Nomes Específicos


from math import sqrt, pi
sqrt(16) # 4.0 — sem prefixo necessário
pi # 3.14159...

Use quando: Usa poucos nomes intensivamente. Evite: from módulo import * (poluição namespace).

3. Importar com Alias


import matplotlib.pyplot as plt
import seaborn as sns

Convenções padrão (pd, np, plt, sns, tf, torch) tornam código instantaneamente legível.

4. Imports Condicionais / Preguiçosos


# Só importa dependências pesadas quando necessário
def analisar_dados():
    import pandas as pd # Import local — arranque mais rápido se não usado
    return pd.read_csv('dados.csv')

Como Import Funciona Nos Bastidores

  1. Verifica sys.modules — se já carregado, retorna módulo em cache
  2. Encontra módulo via sys.path (dir atual, PYTHONPATH, site-packages, stdlib)
  3. Executa código módulo — executa statements topo (def, class, atribuições)
  4. Cria objeto módulo — namespace para globals módulo
  5. Guarda cache sys.modules
  6. Vincula nome namespace importador (por statement import)

Caminho Busca Módulo (sys.path)


import sys
sys.path # ['', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload',
# '/home/user/.local/lib/python3.11/site-packages', ...]
  • '' = diretório script atual (ou CWD se interativo)
  • Instala pacotes: pip install pacote → site-packages
  • Ambientes virtuais isolam site-packages

Pacotes e Submódulos


import pacote.submodulo
from pacote import submodulo
from pacote.submodulo import função

Diretório com __init__.py = pacote. __init__.py pode expor submódulos:


# pacote/__init__.py
from .submodulo import função_pública
__all__ = ['função_pública']

Armadilhas Comuns e Soluções

ProblemaCausaCorreção
ModuleNotFoundErrorNão instalado / env errado / typopip install, verifique venv, verifique ortografia
ImportError: cannot import nameImport circular / nome não no móduloReestruturar, mover imports dentro funções
Conflito nomefrom x import * ou ficheiro local sombra stdlibNão nomeie ficheiros math.py, random.py; use imports explícitos
Erro import relativoExecutar módulo como scriptExecute python -m pacote.módulo ou use imports absolutos

Boas Práticas

  1. Biblioteca padrão primeiro, depois terceiros, depois locais — cada grupo alfabeticamente
  2. Um import por linha (PEP 8)
  3. Use import módulo sobre from módulo import *
  4. Aliases: Use padrões comunidade (pd, np, plt, tf, torch)
  5. Evite manipulação runtime path — use empacotamento correto (pyproject.toml, pip install -e .)
  6. Type checking: from __future__ import annotations + guards TYPE_CHECKING

Exemplo: Bloco Import Limpo


# Biblioteca padrão
import json
import os
from pathlib import Path
from typing import List, Optional

# Terceiros
import numpy as np
import pandas as pd
import requests

# Locais
from meu_projeto.config import settings
from meu_projeto.models import User
from meu_projeto.utils import logger

Sistema import Python é poderoso, explícito, previsível — quando entende modelo namespace. Regra de ouro: torne óbvio de onde vem cada nome. Seu eu futuro (e colegas) agradecerão.