Qu'est-ce que pycache?

D'après ce que j'ai compris, un cache est un fichier crypté de fichiers similaires.

Que fait-on avec le dossier __pycache__ ? C'est ce que nous donnons aux gens au lieu de notre code source? Est-il juste mes données d'entrée? Ce dossier continue d'être créé, à quoi sert-il?

381
demandé sur gcucurull 2013-06-01 08:24:24

7 réponses

lorsque vous exécutez un programme en python, l'interpréteur le compile d'abord en bytecode (c'est une simplification excessive) et le stocke dans le dossier __pycache__ . Si vous regardez là-dedans, vous trouverez un tas de fichiers partageant les noms de la .les fichiers py dans le dossier de votre projet, seulement leurs extensions seront soit .pyc ou .pyo. Il s'agit respectivement de versions compilées par le bytecode et de versions optimisées par le bytecode des fichiers de votre programme.

en tant Que programmeur, vous pouvez en grande partie l'ignore tout simplement... Tout ce qu'il fait est de faire démarrer votre programme un peu plus vite. Lorsque vos scripts changent, ils seront recompilés, et si vous supprimez les fichiers ou l'ensemble du dossier et lancez votre programme à nouveau, ils réapparaîtront (sauf si vous supprimez spécifiquement ce comportement)

si vous utilisez cpython (ce qui est le plus commun, car c'est l'implémentation de référence) et que vous ne voulez pas ce dossier, alors vous pouvez le supprimer en démarrant l'interpréteur avec le drapeau-B, par exemple

python -B foo.py

une autre option, comme tcaswell l'a noté, est de définir la variable d'environnement PYTHONDONTWRITEBYTECODE à n'importe quelle valeur (selon la page de manuel de python, n'importe quelle"chaîne non vide").

329
répondu scott_fakename 2017-11-15 14:33:04

__pycache__ est un dossier contenant Python 3 bytecode compilé et prêt à être exécuté .

ne vous embêtez pas à supprimer ces fichiers ni supprimer la création car cela nuira aux performances. Il suffit d'avoir une commande récursive prête (voir ci-dessous) pour nettoyer au besoin car le bytecode peut devenir périmé dans les cas de bord (voir les commentaires).

les programmeurs Python ignorent généralement le bytecode. En effet, __pycache__ et *.pyc sont lignes communes à voir dans les fichiers .gitignore . Bytecode n'est pas destiné à la distribution et peut être démonté en utilisant dis module .


Si vous utilisez OS X, vous pouvez facilement cacher tous ces dossiers dans votre projet en exécutant la commande suivante à partir du dossier racine de votre projet.

find . -name '__pycache__' -exec chflags hidden {} \;

remplacer __pycache__ par *.pyc pour Python 2.

Cela met un drapeau sur tous ces répertoires (.pyc files) disant À Finder / Textmate 2 de les exclure des listes. Surtout, le bytecode est là, il est juste caché.

relancez la commande si vous créez de nouveaux modules et souhaitez cacher de nouveaux bytecode ou si vous supprimez les fichiers bytecode cachés.


sur Windows, la commande équivalente peut être (non testé, lot script welcome):

dir * /s/b | findstr __pycache__ | attrib +h +s +r

qui c'est la même chose que de parcourir les dossiers de cache de projet en cliquant avec le bouton droit de la souris sur > cacher...


L'exécution de tests unitaires est un scénario (plus dans les commentaires) où la suppression des dossiers *.pyc et __pycache__ est en effet utile. J'utilise les lignes suivantes dans mon ~/.bash_profile et j'exécute simplement cl pour nettoyer au besoin.

alias cpy='find . -name "__pycache__" -delete'
alias cpc='find . -name "*.pyc"       -delete'
...
alias cl='cpy && cpc && ...'
97
répondu F. Malina 2018-07-16 09:17:17

__pycache__dossier est créé lorsque vous utilisez la ligne

import file_name

ou essayez d'obtenir des informations à partir d'un autre fichier que vous avez créé. Cela le rend un peu plus rapide lors de l'exécution du programme votre deuxième fois pour ouvrir l'autre fichier.

12
répondu Aleks. S. 2018-02-17 20:49:41

__pycache__ est un répertoire qui contient des fichiers de cache bytecode générés automatiquement par python, à savoir des fichiers compilés par python, ou .pyc . Vous vous demandez peut-être pourquoi Python, un langage "interprété", a des fichiers compilés. Cela DONC, la question adresses (et c'est certainement la peine de lire cette réponse ).

en gros,

  • il rend votre programme courir un peu plus vite
  • vous pouvez généralement simplement l'ignorer

les docs de python vont plus en profondeur sur comment il fonctionne exactement et pourquoi il existe:

  • il a été ajouté en Python 3.2 parce que le système existant de maintien des fichiers .pyc dans le même répertoire a causé divers problèmes, comme quand un programme a été exécuté avec des interprètes Python de différentes versions. Pour le plein spécifications des fonctions, voir PEP 3174 .
5
répondu FluxLemur 2018-01-08 02:43:52

l'interpréteur python compile le *.PY script file et enregistre les résultats de la compilation dans le répertoire __pycache__ .

Lorsque le projet est exécuté à nouveau, si l'interprète identifie que l' *.py script n'a pas été modifié, il saute l'étape de compilation et exécute l'généré auparavant *.fichier pyc stocké dans le dossier __pycache__ .

Lorsque le projet est complexe, vous pouvez prendre le temps de préparation avant que le projet est courir plus courte. Si le programme est trop petit, vous pouvez l'ignorer en utilisant python -B abc.py avec l'option B .

2
répondu Marcus Thornton 2018-06-21 07:05:53

en 3.2 et plus tard, Python sauve .pyc compilé des fichiers de code octet dans un sous-répertoire nommé __pycache__ situé dans le répertoire où vos fichiers source résident avec des noms de fichiers qui identifient la version de Python qui les a créés (par exemple script.disponible-33.pyc)

1
répondu Shashidhar Yalagi 2017-12-30 00:13:20

pycache = Octet de code compilé les fichiers de python

-1
répondu user9457455 2018-06-14 10:03:46