Sobre o diretório __pycache__
, vale lembrar que ele só guarda os arquivos de módulos que são importados.
Ou seja, suponha que eu rodo python meu_script.py
e dentro dele tem um import meu_modulo
. Então no diretório __pycache__
será gerado o arquivo correspondente ao meu_modulo.py
(geralmente no formato arquivo-versão.pyc
, então no meu caso o arquivo resultante seria __pycache__/meu_modulo.cpython-312.pyc
já que estou usando Python 3.12). Mas não será gerado um arquivo correspondente ao meu_script.py
.
Inclusive, se eu rodar o código do módulo diretamente (por exemplo, python meu_modulo.py
em vez de rodar outro código que o importe), neste caso ele não é adicionado ao __pycache__
.
Isso está descrito na documentação, que também mostra que vc pode adicionar manualmente qualquer arquivo ao __pycache__
, usando o módulo py_compile
. Ex:
import py_compile
py_compile.compile('arquivo.py')
Desta forma, vc pode adicionar qualquer arquivo ao __pycache__
. Mas por padrão, ele terá apenas os módulos que são importados no código que estiver rodando.
Inclusive, na PEP 3147 (que definiu o mecanimo por trás do diretório __pycache__
) tem um diagrama bem didático, e repare como o ponto inicial é um import
: