1098 votes

Qu'est-ce que __pycache__?

De ce que je comprends, un cache est un fichier crypté de fichiers similaires.

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

54 votes

"Est-ce ce que nous donnons aux gens au lieu de notre code source?" - Non, vous leur donnez le code source dans un joli package installable pour faciliter son utilisation.

174 votes

Personne n'en a encore parlé, mais votre définition de cache est bizarre. Le cache est tout simplement un composant qui stocke des données pour que les futures demandes de ces données puissent être servies plus rapidement.

10 votes

10voto

yacc143 Points 107

Un IMPORTANT avertissement est que le fichier .pyc mis en cache sera utilisé à la place du fichier .py s'il manque le fichier .py.

En pratique, cela n'arrive que si vous supprimez (ou renommez) des modules, donc ce n'est pas une occurrence courante, mais si certaines choses continuent à être "là", après vous être gratté la tête, exécuter la commande find . -name *.pyc | xargs rm sur votre une réaction source est probablement la meilleure première réaction.

7voto

Yossarian42 Points 161

À partir du tutoriel officiel de Python Modules

Pour accélérer le chargement des modules, Python met en cache la version compilée de chaque module dans le répertoire __pycache__ sous le nom module.version.pyc, où la version encode le format du fichier compilé ; elle contient généralement le numéro de version de Python. Par exemple, dans la version 3.6 de CPython, la version compilée de spam.py serait mise en cache sous le nom __pycache__/spam.cpython-36.pyc.

de la documentation Python FAQ de Programmation

Lorsqu'un module est importé pour la première fois (ou lorsque le fichier source a changé depuis la création du fichier compilé actuel), un fichier .pyc contenant le code compilé devrait être créé dans un sous-répertoire __pycache__ du répertoire contenant le fichier .py. Le fichier .pyc aura un nom de fichier qui commence par le même nom que le fichier .py et se termine par .pyc, avec un composant central qui dépend du binaire Python particulier qui l'a créé.

6voto

Alok Tiwari Points 198

La version 2.x de Python aura .pyc lorsque l'interprète compile le code.

La version 3.x de Python aura __pycache__ lorsque l'interprète compile le code.

alok@alok:~$ ls
module.py  module.pyc  __pycache__  test.py
alok@alok:~$

5voto

Marcus Thornton Points 603

L'interpréteur python compile le fichier de script *.py et enregistre les résultats de la compilation dans le répertoire __pycache__.

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

Lorsque le projet est complexe, vous pouvez réduire le temps de préparation avant l'exécution du projet. Si le programme est trop petit, vous pouvez l'ignorer en utilisant python -B abc.py avec l'option B.

5voto

TechFree Points 727

L'exécution d'un script Python entraînerait la génération du bytecode en mémoire et le conserverait jusqu'à ce que le programme soit arrêté. Dans le cas où un module est importé, pour une réutilisabilité plus rapide, Python créerait un fichier de cache .pyc (PYC signifie 'Python' 'Compilé') où le bytecode du module importé est mis en cache. L'idée est d'accélérer le chargement des modules Python en évitant une nouvelle compilation (politique de compilation une fois, exécution plusieurs fois) lorsqu'ils sont ré-importés.

Le nom du fichier est le même que le nom du module. La partie après le point initial indique l'implémentation Python qui a créé le cache (pourrait être CPython) suivi de son numéro de version.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X