HOWTO · Python
Importar uma variável de outro arquivo em Python
Este tutorial demonstra como importar variáveis de outro arquivo em Python.
Nesta página
Para usar uma variável definida em outro arquivo Python, importe o módulo e leia a variável por ele, ou importe o nome diretamente com from module import name. O módulo precisa estar disponível no caminho de importação do Python. Em um projeto pequeno, mantenha os dois arquivos no mesmo diretório e execute o script que faz a importação a partir desse projeto.
Importe um nome específico com from ... import ...
Suponha que config.py defina greeting = "Hello, World!". O arquivo que faz a importação pode usar from config import greeting e, em seguida, referenciar greeting diretamente. O nome do módulo é o nome do arquivo sem .py. Essa forma é conveniente quando você precisa de poucos nomes. Também é possível importar vários nomes conhecidos em uma lista separada por vírgulas, como em from config import greeting, language.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
from pathlib import Path
from tempfile import TemporaryDirectory
import sys
with TemporaryDirectory() as directory:
project = Path(directory)
(project / "config.py").write_text('greeting = "Hello, World!"\n', encoding="utf-8")
sys.path.insert(0, str(project))
from config import greeting
print(greeting)
Este exemplo foi fornecido para execução pelo coordenador de ambiente; este pacote de escrita não inclui um resultado de execução.
Importe o módulo e acesse a variável
Use import config e depois leia config.greeting quando quiser deixar o módulo de origem visível em cada uso. O prefixo do módulo deixa clara a origem do nome e reduz conflitos quando módulos diferentes definem nomes com a mesma grafia. Importações comuns também vinculam o nome importado no momento em que a importação é executada; se o valor mudar depois no módulo de origem, o nome importado separadamente não se torna uma referência dinâmica a ele.
Importe um módulo dinamicamente com importlib
Use importlib quando o nome do módulo for escolhido durante a execução, por exemplo, a partir de uma configuração ou escolha do usuário. Para um módulo conhecido, uma importação normal é mais curta e fácil de acompanhar. Uma forma dinâmica autocontida é:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
from pathlib import Path
from tempfile import TemporaryDirectory
import importlib
import sys
with TemporaryDirectory() as directory:
project = Path(directory)
(project / "config.py").write_text('greeting = "Hello, World!"\n', encoding="utf-8")
sys.path.insert(0, str(project))
module_name = "config"
module = importlib.import_module(module_name)
print(module.greeting)
importlib.import_module() retorna o objeto do módulo, então acesse a variável por esse objeto. O módulo ainda precisa estar disponível para o sistema de importação.
Torne importável um módulo em outro diretório
O Python procura diretórios no caminho de importação, não arquivos aleatórios. Uma estrutura simples é project/main.py ao lado de project/settings/config.py; o contexto de execução e a configuração do pacote determinam se settings.config pode ser importado. Para um pacote regular, adicione __init__.py quando apropriado e use o nome do pacote, como em from settings.config import greeting. Executar o programa a partir de outro diretório pode mudar os locais que o Python pesquisa; por isso, prefira uma forma consistente de iniciar o projeto.
Como alternativa deliberada para um script independente, adicione ao sys.path o diretório que contém o módulo antes de importá-lo. Sempre que possível, determine esse diretório a partir de uma localização estável, em vez de presumir que o diretório de trabalho atual será o correto:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
from pathlib import Path
from tempfile import TemporaryDirectory
import sys
with TemporaryDirectory() as directory:
project = Path(directory)
settings_directory = project / "settings"
settings_directory.mkdir()
(settings_directory / "config.py").write_text('greeting = "Hello, World!"\n', encoding="utf-8")
sys.path.insert(0, str(settings_directory))
from config import greeting
print(greeting)
Isso adiciona um diretório a sys.path; não adiciona o próprio arquivo do módulo. Em aplicações mantidas ao longo do tempo, importações de pacotes ou um pacote instalado costumam ser mais fáceis de gerenciar do que alterar o caminho de importação no código da aplicação.
Execute e diagnostique os exemplos
Salve o módulo com o nome exato usado na importação, incluindo as mesmas letras maiúsculas e minúsculas, e certifique-se de que a variável esteja definida no nível do módulo. Se o Python informar ModuleNotFoundError, confira o nome do arquivo, a estrutura dos diretórios, como você iniciou o script e se o diretório que contém o módulo está no caminho de importação. Se o Python informar ImportError para um nome, verifique se a grafia corresponde a um nome definido no módulo. Evite dar aos seus arquivos nomes de módulos da biblioteca padrão, pois isso pode fazer o Python carregar o módulo errado.
Uma importação direta é melhor para uma dependência fixa. Escolha from config import greeting para acessar diretamente um conjunto pequeno de nomes, ou import config quando manter visível o espaço de nomes do módulo tornar o código mais claro. Use importlib quando o nome do módulo realmente depender de dados disponíveis durante a execução.