PyPy est une mise en œuvre du langage Python écrite elle-même en Python, avec une architecture flexible.
Un des buts du projet est d'obtenir une version de Python plus rapide que l'implémentation en C actuelle (CPython), ce but est atteint depuis 2000 avec la version 1.2.
PyPy est principalement un projet de recherche et développement et ne se focalise pas en lui-même sur l'obtention d'une implémentation de Python prête pour la production, pour le moment.
Un des développeurs principaux de PyPy est Armin Rigo, qui a développé , un compilateur à la volée spécialisé pour Python qui accélère le code Python de 4 à 100 fois presque sans intervention de l'utilisateur.
PyPy s'inspire du langage Oz pour l'utilisation d'espace d'objets. Cela permet de combiner les aspects orientation objet et mutabilité, concurrence et distribution, etc. dans le même langage.
PyPy est constitué de deux composants principaux :
un interpréteur Python, écrit lui-même en un sous-ensemble restreint de Python
une chaîne d'outils qui analyse ce sous-ensemble de Python (RPython), le traduit en un langage bas niveau tel que C et le compile.
Ces deux composants peuvent être utilisés indépendamment : l'interpréteur Python peut lui-même s'exécuter au sein d'un autre interpréteur Python existant, et la chaîne de traduction peut s'appliquer à tout programme écrit en RPython.
L'interpréteur Python de PyPy, tel que proposé par la version 2.2, est semblable à une version Python 2.7.3.
PyPy s'approche le plus possible de l'interpréteur standard, avec quelques différences :
Par défaut, PyPy utilise un ramasse-miettes automatique, différent du comptage de références ; il est plus performant, mais certaines ressources peuvent être libérées plus tard que d'habitude.
Quelques modules n'ont pas été portés, en particulier ceux dont le code d'origine est le C.
L'interface de programmation en C n'est pas encore considérée comme assez stable par ses développeurs.