Que signifient les extensions de fichier python, .pyc .pyd .pyo?

436

Que signifient ces extensions de fichiers python?

  • .pyc
  • .pyd
  • .pyo

Quelles sont les différences entre elles et comment sont-elles générées à partir d'un fichier * .py?

Yanki Twizzy
la source

Réponses:

481
  1. .py: Il s'agit normalement du code source d'entrée que vous avez écrit.
  2. .pyc: Ceci est le bytecode compilé. Si vous importez un module, python créera un *.pycfichier qui contient le bytecode pour faciliter sa réimportation plus tard (et plus rapidement).
  3. .pyo: Il s'agissait d'un format de fichier utilisé avant Python 3.5 pour les *.pycfichiers créés avec l' -Oindicateur d' optimisations ( ). (voir la note ci-dessous)
  4. .pyd: Il s'agit essentiellement d'un fichier dll Windows. http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

Aussi pour plus de discussion sur .pycvs .pyo, jetez un œil à: http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html (j'ai copié la partie importante ci-dessous)

  • Lorsque l'interpréteur Python est invoqué avec l'indicateur -O, du code optimisé est généré et stocké dans des fichiers '.pyo'. L'optimiseur n'aide pas beaucoup actuellement; il supprime uniquement les instructions assert. Lorsque -O est utilisé, tout le bytecode est optimisé; Les fichiers .pyc sont ignorés et les fichiers .py sont compilés en bytecode optimisé.
  • Passer deux drapeaux -O à l'interpréteur Python (-OO) entraînera le compilateur de bytecode à effectuer des optimisations qui pourraient dans de rares cas entraîner des programmes défectueux. Actuellement, seules les __doc__chaînes sont supprimées du bytecode, ce qui donne des fichiers '.pyo' plus compacts. Étant donné que certains programmes peuvent dépendre de leur disponibilité, vous ne devez utiliser cette option que si vous savez ce que vous faites.
  • Un programme ne s'exécute pas plus rapidement lorsqu'il est lu à partir d'un fichier '.pyc' ou '.pyo' que lorsqu'il est lu à partir d'un fichier '.py'; la seule chose qui est plus rapide avec les fichiers «.pyc» ou «.pyo» est la vitesse à laquelle ils sont chargés.
  • Lorsqu'un script est exécuté en donnant son nom sur la ligne de commande, le bytecode du script n'est jamais écrit dans un fichier '.pyc' ou '.pyo'. Ainsi, le temps de démarrage d'un script peut être réduit en déplaçant la plupart de son code vers un module et en ayant un petit script d'amorçage qui importe ce module. Il est également possible de nommer un fichier '.pyc' ou '.pyo' directement sur la ligne de commande.

Remarque:

Le 15/09/2015, la version Python 3.5 implémentait PEP-488 et supprimait les .pyofichiers. Cela signifie que les .pycfichiers représentent à la fois un bytecode non optimisé et optimisé.

Bill Lynch
la source
2
Les fichiers dll sont-ils générés à partir de scripts python ou de scripts c / c ++?
Yanki Twizzy du
1
@yankitwizzy: Ouais. Ils doivent être générés à partir du code C / C ++. Le fichier doit être en code machine, il ne peut donc pas provenir directement de python.
Bill Lynch
"L'optimiseur actuellement n'aide pas beaucoup; il ne supprime que les instructions assert.". Es-tu sûr de ça? Essayezdef f(x): assert(x**5 == x*x*x*x*x); return x; import timeit; print(timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=10000));
Jorge Leitao
@ JCLeitão: suis-je sûr de quoi? Pourriez-vous expliquer ce que vous pensez que votre exemple montre plutôt que de simplement jeter du code dans un commentaire.
Bill Lynch
9
Notez que dans Python 3.5 , PEP 488 est implémenté, ce qui supprime le concept de .pyofichiers. Même le bytecode optimisé se termine par l' .pycextension Python 3.5.
Michael Currie
229
  • .py - Script régulier
  • .py3 - (rarement utilisé) Script Python3. Les scripts Python3 se terminent généralement par ".py" et non ".py3", mais je l'ai vu plusieurs fois
  • .pyc - script compilé (Bytecode)
  • .pyo - fichier pyc optimisé (à partir de Python3.5, Python n'utilisera que pyc plutôt que pyo et pyc)
  • .pyw - Script Python à exécuter en mode Windowed, sans console; exécuté avec pythonw.exe
  • .pyx - Cython src à convertir en C / C ++
  • .pyd - Script Python créé en tant que DLL Windows
  • .pxd - Script Cython équivalent à un en-tête C / C ++
  • .pxi - Stub MyPy
  • .pyi - Fichier de raccord ( PEP 484 )
  • .pyz - Archive de script Python ( PEP 441 ); il s'agit d'un script contenant des scripts Python compressés (ZIP) sous forme binaire après l'en-tête de script Python standard
  • .pywz - Archive de script Python pour MS-Windows ( PEP 441 ); il s'agit d'un script contenant des scripts Python compressés (ZIP) sous forme binaire après l'en-tête de script Python standard
  • .py [cod] - notation générique dans ".gitignore" qui signifie que le fichier peut être ".pyc", ".pyo" ou ".pyd".
  • .pth - un fichier de configuration de chemin; son contenu est des éléments supplémentaires (un par ligne) à ajouter sys.path. Voir sitemodule.

Une liste plus longue d'extensions de fichiers Python supplémentaires (la plupart du temps rares et non officielles) peut être trouvée à http://dcjtech.info/topic/python-file-extensions/

Devyn Collier Johnson
la source
11
Il convient de noter qu'un fichier «.pyx» n'est pas tout à fait une source Python qui est convertie en C, mais plutôt du code source Cython (c'est-à-dire: en attente d'être converti en C)
Fred Osterrath
Que représente "I" dans l'extension PYI? "Inclure" / "Implémentation" / "Interface"?
ChrisFreeman
1
.pyw signifie script PYthon qui crée une fenêtre, pas Python 4 Windows. .pyw peut être exécuté sous * nix
Kotauskas
1
En général, .pyw est un script à exécuter en mode fenêtré, c'est-à-dire sans sortie console. Comme l'indique @VladislavToncharov, ils peuvent être exécutés sur la plupart des plates-formes prenant en charge python s'il est installé .
Steve Barnes
1
Cette réponse devrait discuter des .pthfichiers.
wim