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?
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").
__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 && ...'
__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.
__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 .
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
.
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)