Как обновить старое расширение C для Python 2.x до Python 3.x - PullRequest
2 голосов
/ 21 июля 2009

Я хочу использовать расширение для Python, которое я нашел здесь , но я использую Python 3.1, и когда я пытаюсь скомпилировать расширение C, включенное в пакет (_wincon), оно делает не компилируется из-за всех синтаксических ошибок. К сожалению, он был написан для версий 2.x Python и поэтому включает такие методы, как PyMember_Get и PyMember_Set, которые больше не являются частью Python. Моя проблема в том, что я не дошел до изучения C и не смог понять, как изменить код для использования синтаксиса, который все еще действует в Python 3.1. (Была также пара макросов, таких как staticforward, которые нужно исправить, но я предполагаю, что их просто нужно заменить на static.) Поэтому: как мне исправить это?

(Обратите внимание, что я действительно изучал различные другие консольные интерфейсы Windows для Python, такие как расширение win32con в PyWin32), но ни один из них не соответствует моим потребностям настолько, насколько это кажется.)

1 Ответ

7 голосов
/ 21 июля 2009

Я не верю, что есть какая-то волшебная пуля, чтобы сделать исходники C для расширения Python, закодированные для какой-то старой версии Python 2, в действительные исходники C для одного кода, написанного для Python 3 - это требует понимания C и как C API изменился, и что именно делает расширение в каждой части своего кода. Поверьте, если бы мы знали о каком-то волшебном способе сделать это временно без такого человеческого знания и понимания, мы бы включили «генератор кода» (например, 2to3 для источников Python - и даже это имеет существенные ограничения!) Для такой перевод кода С.

На практике, даже несмотря на то, что Python 3.1 сам по себе зрелый и готовый к работе язык, вам еще не следует переносить свой код (или писать совершенно новое приложение) в Python 3.1, если вам нужен какой-то Python 2. * расширение, которое вы не можете портировать - придерживайтесь версии 2.6, пока требуемые расширения не станут доступны (или вы не выучили достаточно C, чтобы портировать их самостоятельно - или перепишите их на Cython, который плавно поддерживает Python 2. * и 3. *, я полагаю, что это лишь небольшая осторожность со стороны программиста).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...