Pelo que entendi, um cache é um arquivo criptografado de arquivos semelhantes.
O que fazemos com a __pycache__
pasta? É o que damos às pessoas em vez do nosso código-fonte? São apenas meus dados de entrada? Esta pasta continua sendo criada, para que serve?
python
python-3.x
caching
user2063042
fonte
fonte
Python 3.8
você pode usar uma variável de ambiente para alterar o local dos diretórios de cache irritantes: stackoverflow.com/a/57414308/1612318Respostas:
Quando você executa um programa em python, o intérprete o compila primeiro pelo código de bytes (isso é uma simplificação excessiva) e o armazena na
__pycache__
pasta. Se você procurar lá, encontrará vários arquivos compartilhando os nomes dos arquivos .py na pasta do seu projeto, apenas suas extensões serão .pyc ou .pyo. Essas são versões compiladas por bytecode e otimizadas por bytecode dos arquivos do programa, respectivamente.Como programador, você pode simplesmente ignorá-lo ... Tudo o que faz é tornar seu programa um pouco mais rápido. Quando seus scripts mudarem, eles serão recompilados e, se você excluir os arquivos ou a pasta inteira e executar o programa novamente, eles reaparecerão (a menos que você suprima especificamente esse comportamento)
Se você estiver usando cpython (que é o mais comum, como é a implementação de referência) e não quiser essa pasta, poderá suprimi-la iniciando o interpretador com o sinalizador -B, por exemplo
Outra opção, como observado por tcaswell, é definir a variável de ambiente
PYTHONDONTWRITEBYTECODE
para qualquer valor (de acordo com a página de manual do python, qualquer "string não vazia").fonte
PYTHONDONTWRITEBYTECODE=<any_value>
para suprimi-la permanentemente.python2
coloca os arquivos compilados no mesmo diretório que os originais, se não me engano.find . -name '*.pyc' -delete
Sim, achado tem uma bandeira para apagar os arquivos encontrados, para que você não tem que usar qualquer xargs shananigans__pycache__
é uma pasta contendo o bytecode do Python 3 compilado e pronto para ser executado .Não recomendo excluir rotineiramente esses arquivos ou suprimir a criação durante o desenvolvimento, pois isso pode prejudicar o desempenho. Basta ter um comando recursivo pronto (veja abaixo) para limpar quando necessário, pois o bytecode pode ficar obsoleto em casos extremos (ver comentários).
Os programadores de Python geralmente ignoram o bytecode. Na verdade
__pycache__
e*.pyc
são linhas comuns para ver em.gitignore
arquivos. O bytecode não se destina à distribuição e pode ser desmontado usando odis
módulo .Se você estiver usando o OS X, poderá ocultar facilmente todas essas pastas no seu projeto executando o seguinte comando na pasta raiz do seu projeto.
Substitua
__pycache__
por*.pyc
para Python 2.Isso define um sinalizador em todos os diretórios (arquivos .pyc) informando ao Finder / Textmate 2 para excluí-los das listagens. É importante ressaltar que o bytecode está lá, está apenas oculto.
Execute o comando novamente se você criar novos módulos e desejar ocultar o novo bytecode ou se você excluir os arquivos ocultos do bytecode.
No Windows, o comando equivalente pode ser (não testado, script em lote bem-vindo):
O mesmo que percorrer as pastas ocultas do projeto usando o botão direito do mouse> ocultar ...
A execução de testes de unidade é um cenário (mais nos comentários) em que a exclusão de
*.pyc
arquivos e__pycache__
pastas é realmente útil. Eu uso as seguintes linhas no meu~/.bash_profile
e apenas corrocl
para limpar quando necessário.fonte
Uma
__pycache__
pasta é criada quando você usa a linha:ou tente obter informações de outro arquivo que você criou. Isso o torna um pouco mais rápido ao executar o programa pela segunda vez para abrir o outro arquivo.
fonte
Resposta atualizada de mais de 3.7 documentos:
Fonte: https://docs.python.org/3/tutorial/modules.html#compiled-python-files
Ou seja, esse diretório é gerado pelo Python e existe para tornar seus programas mais rápidos. Ele não deve estar comprometido com o controle de origem e deve coexistir em paz com o código-fonte local.
__pycache__
é um diretório que contém arquivos de cache de bytecode gerados automaticamente pelo python, ou seja, python compilado ou.pyc
arquivos. Você pode estar se perguntando por que o Python, uma linguagem "interpretada", possui algum arquivo compilado. Esta questão SO aborda isso (e definitivamente vale a pena ler esta resposta ).Os documentos python detalham exatamente como ele funciona e por que existe:
.pyc
arquivos no mesmo diretório causou vários problemas, como quando um programa era executado com intérpretes Python de versões diferentes. Para obter as especificações completas dos recursos, consulte PEP 3174 .fonte
do tutorial oficial do python Módulos
das perguntas freqüentes de programação do Python doc
fonte
A execução de um script python faria com que o código de bytes fosse gerado na memória e mantido até o encerramento do programa. Caso um módulo seja importado, para uma reutilização mais rápida, o Python criaria um arquivo .pyc de cache (PYC é 'Python' 'Compilado'), onde o código de bytes do módulo que está sendo importado é armazenado em cache. A idéia é acelerar o carregamento dos módulos python, evitando a recompilação (compile uma política, execute várias vezes a política) quando eles forem reimportados.
O nome do arquivo é igual ao nome do módulo. A parte após o ponto inicial indica a implementação do Python que criou o cache (poderia ser CPython) seguido pelo número da versão.
fonte
O interpretador python compila o arquivo de script * .py e salva os resultados da compilação no diretório
__pycache__
diretórioQuando o projeto é executado novamente, se o intérprete identificar que o script * .py não foi modificado, ele ignora a etapa de compilação e executa o arquivo * .pyc gerado anteriormente armazenado na
__pycache__
pasta.Quando o projeto é complexo, você pode reduzir o tempo de preparação antes que o projeto seja executado. Se o programa for muito pequeno, você poderá ignorá-lo usando
python -B abc.py
aB
opçãofonte
A versão 2.x do Python terá .pyc quando o interpretador compilar o código.
A versão 3.x do Python terá __pycache__ quando o interpretador compilar o código.
fonte
No 3.2 e posterior, o Python salva os arquivos de código de bytes compilados .pyc em um subdiretório nomeado
__pycache__
localizado no diretório em que seus arquivos de origem residem com nomes de arquivos que identificam a versão do Python que os criou (por exemplo, script.cpython-33.pyc)fonte
Quando você importa um módulo ,
O Python armazena o bytecode compilado no
__pycache__
diretório para que futuras importações possam usá-lo diretamente, em vez de precisar analisar e compilar a fonte novamente.Isso não é feito apenas para executar um script, apenas quando um arquivo é importado.
(As versões anteriores costumavam armazenar o bytecode em cache como arquivos .pyc que agrupavam o mesmo diretório que os arquivos .py, mas a partir do Python 3 eles foram movidos para um subdiretório para tornar as coisas mais organizadas.)
PYTHONDONTWRITEBYTECODE ---> Se estiver definido como uma string não vazia, o Python não tentará gravar arquivos .pyc na importação dos módulos de origem. Isso é equivalente a especificar a opção -B.
fonte