web-dev-qa-db-fra.com

Python vs Cpython

Qu'est-ce que c'est que ces histoires sur Python et CPython (Jython, IronPython)}, je ne comprends pas:

python.org mentionne que CPython est:

_ {L'implémentation "traditionnelle" de Python (surnommé CPython)}

encore une autre question Stack Overflow mentionne que:

_ {CPython est l'interpréteur de code octet par défaut de Python, écrit en C.} _

Honnêtement, je ne comprends pas ce que ces deux explications veulent dire, mais je pensais que si j'utilise CPython, cela signifie que lorsque je lance un exemple de code python, il est compilé en langage C puis exécuté c'était du code C

C’est quoi exactement CPython et en quoi diffère-t-il de python et devrais-je probablement utiliser CPython sur Python et, dans l’affirmative, quels sont ses avantages?

330
K DawG

Alors, qu'est-ce que CPython?

CPython est l'implémentation originale Python. C'est l'implémentation que vous téléchargez de Python.org. Les gens l’appellent CPython pour le distinguer des autres implémentations, plus tard, Python, et pour distinguer l’implémentation du moteur de langage du langage de programmation Python lui-même.

La dernière partie est d’où vient votre confusion; vous devez garder Python-the-language séparé de tout ce que exécute le code Python.

CPython arrive à être implémenté en C. C'est juste un détail d'implémentation, vraiment. CPython compile votre code Python en bytecode (de manière transparente) et interprète ce bytecode dans une boucle d'évaluation.

CPython est également le premier à implémenter de nouvelles fonctionnalités; Le développement en langage Python utilise CPython comme base; d'autres mises en œuvre suivent.

Qu'en est-il de Jython, etc.?

Jython , IronPython et PyPy sont les "autres" implémentations actuelles du langage de programmation Python; ceux-ci sont implémentés en Java, C # et RPython (un sous-ensemble de Python), respectivement. Jython compile votre code Python en bytecode Java , afin que votre code Python puisse être exécuté sur la machine virtuelle Java. IronPython vous permet d'exécuter Python sur le Microsoft CLR . Et PyPy, implémenté dans (un sous-ensemble de) Python, vous permet d’exécuter le code Python plus rapidement que CPython, ce qui devrait vous étonner à coup sûr. :-)

En train de compiler en C

Donc, CPython ne ne traduit pas votre code Python en C par lui-même. Au lieu de cela, il exécute une boucle d'interprétation. Là est un projet qui traduit le code Python-ish en C et s'appelle Cython . Cython ajoute quelques extensions au langage Python et vous permet de compiler votre code en extensions C, code qui connecte à l'interpréteur CPython.

603
Martijn Pieters

Vous devez faire la distinction entre un langage et une implémentation. Python est un langage, 

Selon Wikipedia , "un langage de programmation est une notation pour écrire des programmes, qui sont les spécifications d'un calcul ou d'un algorithme". Cela signifie que ce sont simplement les règles et la syntaxe pour écrire du code. Séparément, nous avons un implémentation du langage de programmation qui est dans la plupart des cas l'interpréteur ou le compilateur réel. 

Python est un langage . CPython est l'implémentation de Python en C. Jython est l'implémentation en Java, et ainsi de suite. 

En résumé: Vous utilisez déjà CPython (si vous avez téléchargé à partir de ici ).

67
jamylak

Cet article explique en détail la différence entre différentes implémentations de Python. Comme le dit l'article: 

La première chose à réaliser est que ‘Python’ est une interface. Il y a un spécification de ce que Python devrait faire et comment il devrait se comporter (comme avec toute interface). Et il y a plusieurs implémentations (comme avec N'importe quelle interface).

La deuxième chose à comprendre est que «interprétés» et «compilés» sont propriétés d'une implémentation, pas une interface.

26
shaktimaan

Même moi avons eu le même problème à comprendre comment CPython, JPython, IronPython, PyPy sont différents les uns des autres.

Je suis donc prêt à clarifier trois choses avant de commencer à expliquer:

  1. Python: C'est un langage, il indique seulement/décrit comment se transmettre/s'exprimer à l'interprète (le programme qui accepte votre code python).
  2. Mise en oeuvre: Il s’agit de la manière dont l’interprète a été écrit, en particulier dans quelle langue et ce qu’il finit par faire.
  3. Bytecode: c'est le code qui est traité par un programme, généralement appelé machine virtuelle, plutôt que par la "vraie" machine, le processeur matériel.

CPython est l'implémentation, qui était écrit en langage C. Il finit par produire du bytecode (jeu d'instructions basé sur pile-machine ) Qui est spécifique à Python, puis l'exécute . La raison pour convertir le code Python en un bytecode est qu’il est plus facile de implémenter un interprète s'il ressemble à des instructions machine. Mais, il n'est pas nécessaire de générer un bytecode avant l'exécution du fichier Code Python (mais CPython produit).

Si vous voulez consulter le bytecode de CPython, vous pouvez le faire. Voici comment vous pouvez:

>>> def f(x, y):                # line 1
...    print("Hello")           # line 2
...    if x:                    # line 3
...       y += x                # line 4
...    print(x, y)              # line 5
...    return x+y               # line 6
...                             # line 7
>>> import dis                  # line 8
>>> dis.dis(f)                  # line 9
  2           0 LOAD_GLOBAL              0 (print)
              2 LOAD_CONST               1 ('Hello')
              4 CALL_FUNCTION            1
              6 POP_TOP

  3           8 LOAD_FAST                0 (x)
             10 POP_JUMP_IF_FALSE       20

  4          12 LOAD_FAST                1 (y)
             14 LOAD_FAST                0 (x)
             16 INPLACE_ADD
             18 STORE_FAST               1 (y)

  5     >>   20 LOAD_GLOBAL              0 (print)
             22 LOAD_FAST                0 (x)
             24 LOAD_FAST                1 (y)
             26 CALL_FUNCTION            2
             28 POP_TOP

  6          30 LOAD_FAST                0 (x)
             32 LOAD_FAST                1 (y)
             34 BINARY_ADD
36 RETURN_VALUE

Maintenant, regardons le code ci-dessus. Les lignes 1 à 6 sont une définition de fonction. Dans la ligne 8, nous importons le module 'dis' qui peut être utilisé pour afficher le bytecode intermédiaire Python (ou disons, désassembleur pour le bytecode Python) généré par CPython (interpréteur).

NOTE: J'ai obtenu le lien vers ce code auprès de #python IRC: https://Gist.github.com/nedbat/e89fa710db0edfb9057dc8d18d979f9c

Et puis, il y a Jython, qui est écrit en Java et finit par produire du code en octets Java. Le code d'octet Java s'exécute sur Java Runtime Environment, qui est une implémentation de Java Virtual Machine (JVM). Si cela prête à confusion, je suppose que vous n'avez aucune idée du fonctionnement de Java. En termes simples, le code Java (le langage, pas le compilateur) est pris par le compilateur Java et génère un fichier (code octet Java) qui peut être exécuté uniquement à l'aide d'un JRE. Ceci est fait de sorte que, une fois le code Java compilé, il puisse être porté sur d'autres machines au format de code octet Java, qui ne peut être exécuté que par JRE. Si cela reste déroutant, vous voudrez peut-être jeter un coup d'œil à cette page Web .

Ici, vous pouvez demander si le bytecode du CPython est portable comme Jython, je suppose que non. Le bytecode produit dans l'implémentation CPython était spécifique à cet interpréteur afin de faciliter l'exécution ultérieure du code (je soupçonne également qu'une telle production de bytecodes intermédiaire est facilitée, bien que le traitement soit effectué dans de nombreux autres interpréteurs). 

Ainsi, dans Jython, lorsque vous compilez votre code Python, vous vous retrouvez avec du code octet Java, qui peut être exécuté sur une machine virtuelle Java.

De même, IronPython (écrit en langage C #) compile votre code Python en Common Language Runtime (CLR), une technologie similaire à celle de la machine virtuelle Java développée par Microsoft.

20
Vijay Kumar

Python est un langage: un ensemble de règles pouvant être utilisé pour écrire des programmes. Il existe plusieurs implémentations de ce langage. 

Quelle que soit l’implémentation que vous prenez, ils font à peu près la même chose: prenez le texte de votre programme et interprétez-le en exécutant ses instructions. Aucun d'entre eux ne compile votre code en C ou dans une autre langue.

CPython est l'implémentation d'origine, écrite en C. (La partie "C" de "CPython" fait référence au langage utilisé pour écrire l'interpréteur Python lui-même.)

Jython est le même langage (Python), mais implémenté en Java. 

L'interprète IronPython a été écrit en C #.

Il y a aussi PyPy - un interpréteur Python écrit en Python. Faites votre choix :)

19
orlenko

implementation signifie quel langage a été utilisé pour implémenter Python et non comment le code python serait implémenté. L’utilisation de CPython a pour avantage la disponibilité de C Run-time ainsi que son intégration facile avec C/C++. 

Donc, CPython a été implémenté à l’origine en utilisant C. L'implémentation d'origine comportait d'autres éléments qui permettaient à Python d'exploiter Java (JYthon) ou .NET Runtime (IronPython).

La disponibilité de la bibliothèque peut varier en fonction de l'implémentation utilisée, par exemple Ctypes n'est pas disponible dans Jython , de sorte que toute bibliothèque utilisant des ctypes ne fonctionnerait pas dans Jython. De même, si vous souhaitez utiliser une classe Java, vous ne pouvez pas le faire directement depuis CPython. Vous avez besoin d'une colle (JEPP) ou devez utiliser Jython (implémentation Java de Python)

7
Abhijit

Vous devriez savoir que CPython ne prend pas vraiment en charge le multithreading à cause du Global Interpreter Lock . Il n’existe pas non plus de mécanisme d’optimisation pour la récursivité et de nombreuses autres limitations que d’autres implémentations et bibliothèques essaient de combler.

Vous devriez jeter un oeil à cette page sur le wiki python.

Regardez les extraits de code sur la page this , cela vous donnera une bonne idée de ce qu'est un interprète.

2
TheEnglishMe

L'implémentation originale et standard de Python est généralement appelée CPython when vous voulez la contraster avec les autres options (et simplement «Python» sinon). Cenom provient du fait qu'il est codé en portable ANSI C language code. C’est Le Python que vous extrayez de http://www.python.org , avec les distributions ActivePython et Enthought, et l’a automatiquement sur la plupart des systèmes Linux et les ordinateurs Mac OS X . Si vous avez trouvé une version préinstallée de Python sur votre ordinateur, c'est probablement CPython, à moins que votre société n'utilise Python de manière plus spécialisée

Sauf si vous souhaitez utiliser des scripts Java ou .NET avec Python ou rechercher les avantages de Stackless ou PyPy convaincante, vous voudrez probablement utiliser le système standard CPython . Comme il s’agit de l’implémentation de référence du langage, il a tendance à exécuter le fichier le plus rapide, le plus complet, et plus moderne et robuste que l’alternative systèmes.

0
Sushant Chaudhary

Une implémentation de langage de programmation est un système permettant d'exécuter des programmes informatiques.

Il existe deux approches générales pour la mise en œuvre du langage de programmation:

  • Interprétation: un interprète prend en entrée un programme dans une langue et exécute les actions écrites dans cette langue sur une machine.
  • Compilation: un compilateur prend en entrée un programme dans une langue et le traduit dans une autre langue, qui peut servir d'input à un autre interprète ou à un autre compilateur.

Python est un langage de programmation de haut niveau interprété créé par Guido van Rossum en 1991. 

CPython est une version de référence du langage informatique Python, qui est écrit en C et créé par Guido van Rossum.

Autre liste d'implémentations Python

La source

0
Premraj