Localização de módulos no Python

Nesta publicação, você vai aprender como o Python localiza módulos, arquivos contendo código Python reutilizável. Entender esse processo é importante para gerenciar pacotes e módulos eficientemente.

Ricardo Reis
3 min readFeb 27, 2021

--

Aqui você descobrirá como o Python utiliza o diretório site-packages, a ordem de busca por módulos, e como a variável de ambiente PYTHONPATH e arquivos .pth influenciam esse processo. Este conhecimento é essencial para qualquer desenvolvedor que deseja manter seus projetos organizados e acessíveis.

Pip

Ao instalarmos um pacote com o pip, o mesmo será armazenado no diretório do Python:

\python-dir\lib\site-packages 

O diretório site-packages é a pasta onde todos os arquivos instalados através da ferramenta pip são armazenados.

Onde o Python procura os módulos?

Ao utilizarmos a instrução import o Python percorre uma lista de diretórios em busca do módulo a ser importado.

A primeira verificação que o Python faz é verificar se o módulo que está sendo importado é um módulo builtin, caso não seja, será procurado no diretório em que o programa está sendo executado.

O Python irá buscar no diretório em que o arquivo principal da aplicação foi executado, ou seja, o primeiro script Python.

De dentro do código Python, nós conseguimos descobrir quais são os diretórios que o Python irá buscar os módulos.

O símbolo path (está dentro do módulo sys) contém a lista dos caminhos dos diretórios (paths) em que o Python irá buscar pelos módulos.

from sys import path
print(path)

Locais onde poderá haver buscas por módulos

  1. Diretório Base
  2. Diretório da variável PYTHONPATH
  3. Diretório da Biblioteca Padrão
  4. Diretórios definidos por arquivos *.pth

Diretório Base

O diretório base é o diretório onde o script inicial foi executado.

Portanto se adicionarmos todos os módulos no mesmo diretório não teremos problemas em relação à importação. Porém essa não é uma boa prática de programação pois pode causar uma desorganização entre os diversos nomes desses arquivos.

Diretório da variável PYTHONPATH

Após buscar no diretório base, será verificado nos diretórios definidos na variável de ambiente PYTHONPATH.

Mesmo se nós estamos trabalhando com ambientes virtuais nós somos capazes de definir a variável PYTHONPATH, porém atualmente não existe mais necessidade até porque quando nós trabalhamos com ambiente virtual nós temos que as configurações acabam sendo feitas de outra maneira.

Diretório da Biblioteca Padrão

Após verificar em todos os diretórios definidos no PYTHONPATH o Python irá buscar pelo nome do módulo, no diretório da biblioteca padrão, ou seja, no diretório contido dentro da pasta de instalação do Python.

Diretórios definidos por arquivos *.pth

Caso tenha sido definido um arquivo com extensão .pth, que é a forma para definir vários paths dentro de um arquivo e que deve ser armazenado dentro da instalação do Python.

Se por acaso o usuário estiver trabalhando dessa forma o arquivo com extensão pth será aberto e todos os diretórios ali definidos serão rastreados em busca do módulo que precisa ser importado.

Extensões buscadas pelo Python

A lista de extensões a seguir não é uma lista de precedência (ordem) das extensões que será utilizada na busca do módulo, apenas enumeramos todas as extensões que serão consideradas pelo Python como sendo o arquivo do módulo que está sendo procurado.

  • modulo.pyd (*.dll no Windows ou *.so no Unix)
  • modulo.py
  • modulo.pyc ou modulo.pyo
  • modulo (pasta)
  • modulo.so (em linux)
  • Uma imagem na memória

Inserir um diretório no path de módulos

Para inserir um diretório na variável de ambiente PYTHONPATH você pode utilizar o código abaixo:

import sys
sys.path.insert(0, "c:\\dev\\tmp\\")

O código acima irá inserir o diretório c:\dev\tmp\ como sendo o primeiro lugar (definido pelo 0) onde o Python deve procurar por módulos e o uso de duas barras \\ é necessário para impedir erros de caminhos com barra invertidas.

--

--