Qual é a melhor maneira de limpar todas as __pycache__
pastas e .pyc/.pyo
arquivos de um projeto python3. Eu já vi vários usuários sugerirem o pyclean
script incluído no Debian, mas isso não remove as pastas. Eu quero uma maneira simples de limpar o projeto antes de enviar os arquivos para o meu DVS.
python
python-3.x
python-3.4
delete-file
SalientGreen
fonte
fonte
*__pycache__
,*.pyc*
e não faz distinção entre arquivos e diretórios. A maioria dosrm
comandos gerados também será supérflua.find
nemgrep
nemrm
e pode ser perigoso para qualquer diretório de trabalho atual que possa conteruseful.pycle.json
ouimportant_deployment_setting_about__pycache__.txt
etc. O que eu não descartaria em toda a base de usuários do SO. Sem mencionar o quão (perigosamenterm -rf
)xargs
seria quebrado por um arquivo com espaço em branco no nome. Então eu editei…grep: parentheses not balanced
Encontrei a resposta quando digitei pyclean como pycclean:
Correr
py3clean .
limpou muito bem.fonte
__pycache__
pastas, nem.pyc
arquivos (testado em debian)macOS e Linux
BSD's
find
implementação no macOS é diferente da localização do GNU - é compatível com a localização do BSD e do GNU. Comece com uma implementação globbing, usando-name
e-o
for ou - Coloque esta função no seu.bashrc
arquivo:Em seguida, vá
cd
para o diretório que você deseja limpar recursivamente e digitepyclean
.Somente localização GNU
Esta é uma solução GNU find, only (ou seja, Linux), mas acho que é um pouco melhor com o regex:
Qualquer plataforma, usando Python 3
No Windows, você provavelmente nem tem
find
. No entanto, você provavelmente possui o Python 3, que a partir do 3.4 possui opathlib
módulo conveniente :o
-B
bandeira diz ao Python para não gravar.pyc
arquivos. (Veja também aPYTHONDONTWRITEBYTECODE
variável de ambiente.)Os abusos acima listam compreensões para loop, mas ao usar
python -c
, o estilo é uma preocupação secundária. Como alternativa, podemos abusar (por exemplo)__import__
:Crítica de uma resposta
A resposta principal costumava dizer:
Isso parece ser menos eficiente porque usa três processos.
find
usa uma expressão regular; portanto, não precisamos de uma chamada separada degrep
. Da mesma forma, tem-delete
, por isso, não precisa de uma invocação separada dorm
contrário -e a um comentário aqui, ele vai excluir diretórios não vazios desde que eles se esvaziado em virtude da correspondência de expressão regular.Na
xargs
página do manual:fonte
shutil.rmtee
os__pycache__
diretórios em vez de esvaziá-los primeiro; um one-liner pode ser bom para um alias fácil. Eu sou um grande fã dePath
agora, no entanto, então acho que vou usar essa versão no meu script.Como este é um projeto Python 3, você só precisa excluir
__pycache__
diretórios - todos os arquivos.pyc
/.pyo
estão dentro deles.ou sua forma mais simples,
que não funcionou para mim por algum motivo (os arquivos foram excluídos, mas os diretórios não), então estou incluindo os dois por uma questão de integridade.
Como alternativa, se você estiver fazendo isso em um diretório que está sob controle de revisão, poderá solicitar ao RCS que ignore as
__pycache__
pastas recursivamente. Em seguida, no momento necessário, limpe todos os arquivos ignorados. Isso provavelmente será mais conveniente, porque provavelmente haverá mais para limpar do que apenas__pycache__
.fonte
.pyc
arquivos estão dentro dele.Directory not empty
a segunda variante aqui?Este é o meu alias que funciona tanto com o Python 2 quanto com o Python 3, removendo todos os
.pyc .pyo
arquivos e__pycache__
diretórios recursivamente.fonte
Se você precisar de uma solução permanente para manter os arquivos de cache Python fora dos diretórios do seu projeto:
A partir do Python 3.8, você pode usar a variável de ambiente
PYTHONPYCACHEPREFIX
para definir um diretório de cache para o Python.Nos documentos do Python:
Exemplo
Se você adicionar a seguinte linha ao seu
./profile
no Linux:O Python não criará os
__pycache__
diretórios irritantes no diretório do seu projeto, mas colocará todos eles em~/.cache/cpython/
fonte
O comando que eu usei:
find . -type d -name "__pycache__" -exec rm -r {} +
Explica:
Primeiro localiza todas as
__pycache__
pastas no diretório atual.Execute
rm -r {} +
para excluir cada pasta na etapa acima ({}
signifique o espaço reservado e finalize+
o comando)Editado 1:
Estou usando o Linux, para reutilizar o comando que adicionei a linha abaixo ao
~/.bashrc
arquivoEditado 2: se você estiver usando o Código VS , não precisará remover
__pycache__
manualmente. Você pode adicionar o snippet abaixo aosettings.json
arquivo. Depois disso, o VS Code ocultará todas as__pycache__
pastas para vocêEspero que ajude !!!
fonte
Usando PyCharm
Para remover arquivos compilados do Python
No
Project Tool Window
, clique com o botão direito do mouse em um projeto ou diretório, de onde os arquivos compilados Python devem ser excluídos.No menu de contexto, escolha
Clean Python compiled files
.Os
.pyc
arquivos que residem no diretório selecionado são excluídos silenciosamente.fonte
No diretório do projeto, digite o seguinte:
Excluindo todos os arquivos .pyc
find . -path "*/*.pyc" -delete
Excluindo todos os arquivos .pyo :
find . -path "*/*.pyo" -delete
Por fim, para excluir todos os '__pycache__' , digite:
find . -path "*/__pycache__" -type d -exec rm -r {} ';'
Se você encontrar um erro de permissão negada , adicione sudo no início de todo o comando acima.
fonte
Muito obrigado pelas outras respostas, com base nelas, foi o que eu usei para o
prerm
arquivo do meu pacote Debian :fonte
Por que não usar apenas
rm -rf __pycache__
? Executegit add -A
depois para removê-los do seu repositório e adicionar__pycache__/
ao seu arquivo .gitignore.fonte
Por favor, vá ao seu terminal e digite:
e será removido.
fonte