2010-07-21 5 views
43

J'ai programmé Python depuis un peu plus d'un demi-an maintenant et je m'intéresse plus aux composants internes de Python qu'à l'utilisation de Python pour développer des applications. Actuellement, je travaille sur le port de quelques bibliothèques de Python2 à Python3. Cependant, j'ai une vue plutôt abstraite sur la façon de faire des trucs de port de Python2 à Python3 comme la plupart des changements traitent des problèmes de conception dans Python2.xComment puis-je en savoir plus sur les internes de Python?

Je voudrais en savoir plus sur les internes de Python; devrais-je opter pour une approche descendante ou ascendante? Y a-t-il des références que vous pourriez recommander?

+0

Pouvez-vous expliquer pourquoi vous pensez que vous avez besoin de savoir quoi que ce soit sur les entrailles de Python (2.x? 3.x? Aux deux) capable de porter le code de 2 à 3? –

+0

peut-être la question n'était pas assez claire (désolé à ce sujet!). Je ne trouve actuellement aucune difficulté à porter des bibliothèques, c'est juste que je voudrais avoir une meilleure compréhension des internes de Python. Je suis simplement curieux de savoir comment les choses fonctionnent sous le capot. Je me demandais si une approche descendante ou ascendante serait la même. Aussi, si quelqu'un pourrait suggérer des ressources pour la même chose. –

+0

@uki réponse extrêmement tard, mais je vais juste mettre ceci ici pour tous ceux qui peuvent encore être intéressés. [À l'intérieur de la machine virtuelle Python] (https://leanpub.com/insidethepythonvirtualmachine) fournit une description détaillée des éléments internes de Python. – cobie

Répondre

29

Il semble que vous vouliez en savoir plus sur la logique derrière la conception de la langue, plutôt que sur les internes. "internals" pour moi signifie des choses comme la façon dont les objets sont disposés dans la mémoire, comment le comptage des références fonctionne, et ainsi de suite. Si vous cherchez une compréhension plus profonde des décisions de conception, essayez de lire le PEPs: ce sont les propositions de changements dans la langue, et comprennent souvent des discussions détaillées sur les raisons des changements, les alternatives rejetées, et ainsi de suite. sur. Même les PEP rejetés sont utiles, car ils montrent la pensée qui a façonné le langage.

Par exemple:

et ainsi de suite ..

Si vous voulez vraiment en savoir plus sur Python internes, puis commencer par lire sur l'API Python C, qui est utilisé t o construire Python lui-même: mon discours A Whirlwind Excursion through Python C Extensions est un endroit pour commencer.Ensuite, vous pouvez plonger dans le code source Python lui-même pour tout ce dont vous avez besoin de savoir.

+4

S'en tenir au thème de Ned, vous pouvez obtenir l'histoire derrière certaines décisions de conception directement de la bouche du cheval - http://python-history.blogspot.com/ –

0
+0

oui. mais 2to3 ne s'occupe pas de tous les changements. aussi, faire la conversion n'est pas mon problème; J'aimerais comprendre les changements à un niveau plus basique. –

+0

Aw, ne méritait pas vraiment une downvote, c'était juste un malentendu. Voté pour compenser. –

1

Je voudrais d'abord lire le document What's New pour Python 3. Il donne un bon aperçu de haut niveau et touche les changements détaillés.

Vous pouvez également faire une recherche pour 'porting to python 3' ou similaire. Il y a beaucoup de bonnes ressources et d'outils.

Un outil qui est nouveau et difficile à trouver est six, par Benjamin Peterson. Il permet l'écriture de code compatible avec l'intervalle Python 2 * 3.

La partie que j'ai trouvé le plus difficile concernant le maintien du code compatible Python 2 et Python 3 était le déploiement. Je pourrais écrire du code qui fonctionnerait très bien, mais quand je suis allé faire un paquet et déployer, il n'était pas clair quand la conversion devrait se produire. J'ai finalement trouvé une commande distutils build_py_2_to_3 qui ferait l'affaire. En utilisant cette commande dans mon setup.py, je pourrais publier une distribution source qui serait déployée sur Python 2 ou Python 3. An example peut être trouvé dans jaraco.util.

Vous avez également posé des questions sur les composants internes. Si vous voulez vraiment obtenir à l'interne, vous pouvez voir la source pour Python 2.x et Python 3.x, mais honnêtement, je voudrais rester avec les tutoriels et peut-être certains des fichiers .py dans les bibliothèques Python.

+0

Je n'ai aucun problème à porter des bibliothèques en tant que telles. Je connais _how_ aux bibliothèques portuaires. Je voudrais avoir de l'aide sur le type d'approche à adopter pour comprendre les internes de Python. Désolé si la question n'était pas claire. –

1

dois-je opter pour une approche descendante ou ascendante?

Les deux! Sérieusement.

15

Pour quelqu'un qui trébuche sur cette question à partir de liens connexes ou de recherche, il existe une documentation écrite Yaniv Aknin sur Python Internals. Il commence à partir de zéro et est très lisible.

Questions connexes