Quelle est la MEILLEURE façon de supprimer tous les __pycache__
dossiers et .pyc/.pyo
fichiers d'un projet python3. J'ai vu plusieurs utilisateurs suggérer le pyclean
script fourni avec Debian, mais cela ne supprime pas les dossiers. Je veux un moyen simple de nettoyer le projet avant de pousser les fichiers sur mon DVS.
python
python-3.x
python-3.4
delete-file
Vert saillant
la source
la source
*__pycache__
,*.pyc*
et il ne fait pas la distinction entre les fichiers et les répertoires. La plupart desrm
commandes générées seront également superflues.find
nigrep
nirm
et cela pourrait être dangereux pour tout répertoire de travail actuel qui pourrait conteniruseful.pycle.json
ouimportant_deployment_setting_about__pycache__.txt
etc. Ce que je n'exclurais pas sur l'ensemble de la base d'utilisateurs de SO. Sans parler de la manière (dangereusementrm -rf
) casséexargs
par un fichier avec des espaces dans le nom. Alors je l'ai édité…grep: parentheses not balanced
J'ai trouvé la réponse moi-même lorsque j'ai mal tapé pyclean comme pycclean:
Courir l'
py3clean .
a très bien nettoyé.la source
__pycache__
dossiers, ni les.pyc
fichiers (testé sur Debian)macOS et Linux
L'
find
implémentation de BSD sur macOS est différente de GNU find - elle est compatible avec BSD et GNU find. Commencez par une implémentation de globbing, en utilisant-name
et le-o
for ou - Mettez cette fonction dans votre.bashrc
fichier:Ensuite,
cd
dans le répertoire que vous souhaitez nettoyer de manière récursive et tapezpyclean
.Recherche GNU uniquement
Ceci est une solution GNU find, uniquement (c'est-à-dire Linux), mais je pense que c'est un peu plus agréable avec l'expression régulière:
N'importe quelle plate-forme, utilisant Python 3
Sur Windows, vous n'avez probablement même pas
find
. Cependant, vous avez probablement Python 3, qui à partir de 3.4 a lepathlib
module pratique :Le
-B
drapeau indique à Python de ne pas écrire de.pyc
fichiers. (Voir aussi laPYTHONDONTWRITEBYTECODE
variable d'environnement.)Les abus ci-dessus répertorient les compréhensions pour la boucle, mais lors de l'utilisation
python -c
, le style est plutôt une préoccupation secondaire. Alternativement, nous pourrions abuser (par exemple)__import__
:Critique d'une réponse
La première réponse disait:
Cela semble moins efficace car il utilise trois processus.
find
prend une expression régulière, nous n'avons donc pas besoin d'un appel séparé degrep
. De même, il a-delete
, donc on n'a pas besoin d' un appel séparérm
-et contrairement à un commentaire ici, il va supprimer des répertoires non vides tant qu'ils se vident en raison du match d'expression régulière.Depuis la
xargs
page de manuel:la source
shutil.rmtee
sur les__pycache__
répertoires au lieu de les vider d'abord; un one-liner pourrait être bien pour un alias facile. Je suis un grand fan dePath
maintenant, donc je pense que je vais utiliser cette version dans mon script.Puisqu'il s'agit d'un projet Python 3, il vous suffit de supprimer les
__pycache__
répertoires - tous les fichiers.pyc
/.pyo
sont à l'intérieur.ou sa forme plus simple,
ce qui n'a pas fonctionné pour moi pour une raison quelconque (les fichiers ont été supprimés mais les répertoires ne l'ont pas été), donc j'inclus les deux par souci d'exhaustivité.
Alternativement, si vous faites cela dans un répertoire qui est sous contrôle de révision, vous pouvez dire au RCS d'ignorer les
__pycache__
dossiers de manière récursive. Ensuite, au moment voulu, nettoyez simplement tous les fichiers ignorés. Ce sera probablement plus pratique car il y aura probablement plus à nettoyer que juste__pycache__
.la source
.pyc
fichiers ne s'y trouvent pas.Directory not empty
la deuxième variante ici?C'est mon alias qui fonctionne à la fois avec Python 2 et Python 3 en supprimant tous les
.pyc .pyo
fichiers ainsi que les__pycache__
répertoires de manière récursive.la source
Si vous avez besoin d'une solution permanente pour garder les fichiers de cache Python hors des répertoires de votre projet:
À partir de Python 3.8, vous pouvez utiliser la variable d'environnement
PYTHONPYCACHEPREFIX
pour définir un répertoire de cache pour Python.À partir de la documentation Python:
Exemple
Si vous ajoutez la ligne suivante à votre
./profile
sous Linux:Python ne créera pas les
__pycache__
répertoires ennuyeux dans le répertoire de votre projet, au lieu de cela, il les placera tous sous~/.cache/cpython/
la source
La commande que j'ai utilisée:
find . -type d -name "__pycache__" -exec rm -r {} +
Explique:
Recherche d'abord tous les
__pycache__
dossiers du répertoire actuel.Exécutez
rm -r {} +
pour supprimer chaque dossier à l'étape ci-dessus ({}
signifiez pour l'espace réservé et+
pour terminer la commande)Édité 1:
J'utilise Linux, pour réutiliser la commande, j'ai ajouté la ligne ci-dessous au
~/.bashrc
fichierModifié 2: Si vous utilisez VS Code , vous n'avez pas besoin de supprimer
__pycache__
manuellement. Vous pouvez ajouter l'extrait ci-dessous ausettings.json
fichier. Après cela, VS Code masquera tous les__pycache__
dossiers pour vousJ'espère que ça aide !!!
la source
Utilisation de PyCharm
Pour supprimer les fichiers compilés Python
Dans le
Project Tool Window
, cliquez avec le bouton droit sur un projet ou un répertoire dans lequel les fichiers compilés Python doivent être supprimés.Dans le menu contextuel, choisissez
Clean Python compiled files
.Les
.pyc
fichiers résidant dans le répertoire sélectionné sont supprimés en silence.la source
Dans le répertoire du projet, tapez ce qui suit:
Suppression de tous les fichiers .pyc
find . -path "*/*.pyc" -delete
Suppression de tous les fichiers .pyo :
find . -path "*/*.pyo" -delete
Enfin, pour supprimer tout '__pycache__' , tapez:
find . -path "*/__pycache__" -type d -exec rm -r {} ';'
Si vous rencontrez une erreur d' autorisation refusée , ajoutez sudo au début de toutes les commandes ci-dessus.
la source
Merci beaucoup pour les autres réponses, basées sur elles, voici ce que j'ai utilisé pour le
prerm
fichier de mon paquet Debian :la source
Pourquoi ne pas simplement utiliser
rm -rf __pycache__
? Exécutezgit add -A
ensuite pour les supprimer de votre référentiel et les ajouter__pycache__/
à votre fichier .gitignore.la source
Veuillez simplement vous rendre sur votre terminal puis taper:
et il sera supprimé.
la source