использование Cython для переноса модулей на Python 3.1 - PullRequest
6 голосов
/ 28 ноября 2010

Можно ли импортировать произвольные модули в cython, скомпилировать их в общие объектные файлы и затем использовать их в python 3.1?

Причина этого в том, что я пишу расширение для программы "blender"msgstr ", который имеет внутренний интерпретатор python 3.1.Но я также хотел бы использовать некоторые python-модули, которые не портированы на 3.x, и все же

Я имею в виду конкретно numpy (но также и некоторые другие библиотеки).У меня есть модуль, который использует NumPy.Поскольку я хочу распространять этот модуль, я не хочу, чтобы poeple устанавливал numpy на свои машины.это будет работать?

Ответы [ 2 ]

4 голосов
/ 28 ноября 2010

В принципе, я считаю, что это возможно. Cython работает путем перевода Python-подобного кода в C-код. Этот код может быть скомпилирован для Python 2 или Python 3 (он использует операторы препроцессора C для изменения используемого кода).

Плохая новость заключается в том, что он будет работать только для расширений, написанных в Python-подобном коде, который Cython может перевести. Вы не можете использовать Cython для расширений, написанных на C, таких как Numpy.

Хорошая новость заключается в том, что, по крайней мере, для Numpy, вам не нужно этого делать. Начиная с версии 1.5 , Numpy поддерживает Python 3. Для Windows доступен бинарный файл; в других системах вам, возможно, придется решить, как самостоятельно скомпилировать код.

0 голосов
/ 28 ноября 2010

Проверьте документацию по Python, в разделе «Справочное руководство по API Python / C» подробно описано, как это сделать.

РЕДАКТИРОВАНИЕ: Итак, вы хотите портировать 2.x lib на 3.x. Это большая работа. Если решение вашего желания существует. Python 2.x должен был быть устранен к настоящему времени. Конечно, есть инструмент 2to3. Но библиотека Python, написанная на C, не применима таким образом.

Таким образом, вы можете следовать инструкции в «Справочном руководстве по API Python / C», чтобы перенести lib на 3.x или просто подождать.

...