Arquivos .pyc gerados sempre que os elementos de código correspondentes são importados e atualizados se os arquivos de código correspondentes foram atualizados. Se os arquivos .pyc forem excluídos, eles serão regenerados automaticamente. No entanto, eles não são excluídos automaticamente quando os arquivos de código correspondentes são excluídos.
Isso pode causar alguns erros realmente divertidos durante os refatores em nível de arquivo.
Em primeiro lugar, você pode acabar empurrando um código que só funciona na sua máquina e em mais ninguém. Se você tiver referências pendentes a arquivos excluídos, eles ainda funcionarão localmente se você não excluir manualmente os arquivos .pyc relevantes, porque os arquivos .pyc podem ser usados nas importações. Isso é agravado pelo fato de que um sistema de controle de versão configurado corretamente irá apenas enviar arquivos .py para o repositório central, não arquivos .pyc, o que significa que seu código pode passar no "teste de importação" (tudo importa bem) muito bem e não trabalhar no computador de outra pessoa.
Em segundo lugar, você pode ter alguns bugs terríveis se transformar pacotes em módulos. Quando você converte um pacote (uma pasta com um __init__.py
arquivo) em um módulo (um arquivo .py), os arquivos .pyc que antes representavam esse pacote permanecem. Em particular, os __init__.pyc
restos mortais. Então, se você tiver o pacote foo com algum código que não importa, então exclua esse pacote e crie um arquivo foo.py com alguma função def bar(): pass
e execute:
from foo import bar
você obtém:
ImportError: cannot import name bar
porque o python ainda está usando os arquivos .pyc antigos do pacote foo, nenhum dos quais define bar. Isso pode ser especialmente problemático em um servidor da web, onde o código em pleno funcionamento pode quebrar por causa de arquivos .pyc.
Como resultado de ambos os motivos (e possivelmente outros), o código de implantação e o código de teste devem excluir arquivos .pyc, como a seguinte linha de bash:
find . -name '*.pyc' -delete
Além disso, a partir do python 2.6, você pode executar o python com o -B
sinalizador para não usar arquivos .pyc. Consulte Como evitar arquivos .pyc? para mais detalhes.
Consulte também: Como removo todos os arquivos .pyc de um projeto?
rm *.pyc
. Isso não excluirá arquivos .pyc em pastas aninhadas. Use em seufind . -name '*.pyc' -delete
lugar