2009-07-21 5 views
2

Je veux utiliser une extension pour Python que j'ai trouvé here, mais j'utilise Python 3.1 et quand je tente de compiler le C extension incluse dans le package (_wincon), elle ne compile pas en raison de toutes les erreurs de syntaxe. Malheureusement, il a été écrit pour les versions 2.x de Python et en tant que tel inclut des méthodes telles que PyMember_Get et PyMember_Set, qui ne font plus partie de Python. Mon problème est que je n'ai pas appris à apprendre le C et en tant que tel n'a pas été capable de comprendre comment modifier le code pour utiliser la syntaxe qui est toujours valide dans Python 3.1. (Il y avait aussi quelques macros telles que staticforward qui ont besoin d'être corrigées, mais je suppose que celles-ci doivent juste être changées en static.) Par conséquent: comment puis-je corriger cela?Comment faire pour mettre à jour une ancienne extension C pour Python 2.x à Python 3.x

(Notez que je l'ai bien regardé dans d'autres interfaces de la console Windows pour Python tels que l'extension win32con en pywin32), mais aucun d'entre eux correspondent à mes besoins autant que celui-ci semble.)

Répondre

7

Je don Je crois qu'il n'y a pas de solution miracle pour que les sources C d'une extension Python soient codées pour une ancienne version de Python 2, en sources C valides pour une codée pour Python 3 - il faut comprendre C et comment le C API a changé, et de ce que fait exactement l'extension dans chaque partie de son code. Croyez-moi, si nous avions connu un moyen magique de le faire sans connaissance et compréhension humaines, nous aurions inclus un "générateur de code" (comme 2to3 pour les sources Python - et même cela a des limitations importantes!) Pour telle traduction de code C.

Dans la pratique, même si Python 3.1 est en soi une langue mature et prêt pour la production, vous ne devriez pas encore migrer votre code (ou écrire une toute nouvelle application) en Python 3.1 si vous avez besoin Python 2. * extension que vous ne pouvez pas porter - restez avec 2.6 jusqu'à ce que les extensions dont vous avez besoin soient disponibles (ou vous avez assez appris C pour les porter vous-même - ou réécrivez-les dans Cython, qui supporte sans problème Python 2. * et 3. *, avec, je crois, juste un minimum de soin de la part du programmeur).

+0

J'avais le sentiment que c'était le cas. Quoi qu'il en soit, merci pour le conseil. En outre, je prévoyais d'apprendre C finalement, alors je pourrais aussi bien commencer maintenant, non? – JAB

+0

@Cat, bien sûr, cela semble tout à fait raisonnable –

Questions connexes