Как использовать Cython для создания подставки DLL - PullRequest
8 голосов
/ 30 мая 2011

У меня есть скрипт Python, я переименовал скрипт в файл .pyx. Я хочу скомпилировать этот код в файл dll стенда.

Я видел в этом документе , что Cython создаст файл dll, но я получу только pyd.

У меня есть mingw и я пытаюсь использовать команду python setup.py build --compiler=mingw32 для компиляции скрипта моего кода (просто привет):

def init():
    return "hello world"

Есть идеи? Спасибо

Ответы [ 2 ]

4 голосов
/ 30 мая 2011

Итак, первое, что нужно сделать, это переименовать файл в helloworld.pyx. Теперь нам нужно сделать setup.py, который похож на Python Makefile (для получения дополнительной информации см. сборник). Ваш setup.py должен выглядеть как:

from distutils.core import setup
from distutils.extension import Extension

from Cython.Distutils import build_ext
    setup(
        cmdclass = {'build_ext': build_ext},
        ext_modules = [Extension("helloworld",
    ["helloworld.pyx"])] )

Чтобы использовать это для создания вашего файла Cython используйте параметры командной строки:

$ python setup.py build_ext --inplace

Который оставит файл в вашем локальном каталог с именем helloworld.so в Unix или helloworld.dll в Windows.

Теперь к используйте этот файл: запустите питон интерпретатор и просто импортировать его, как будто это был обычный модуль Python:

3 голосов
/ 03 августа 2012

Является ли файл * .pyd таким же, как DLL?

Да, файлы .pyd являются DLL, но есть несколько отличий,Если у вас есть DLL с именем foo.pyd, то она должна иметь функцию PyInit_foo().Затем вы можете написать Python «import foo», и Python будет искать foo.pyd (а также foo.py, foo.pyc) и, если найдет его, попытается вызвать PyInit_foo() для его инициализации.Вы не связываете свой .exe с foo.lib, так как это заставит Windows требовать наличия DLL.

Обратите внимание, что путь поиска для foo.pyd - это PYTHONPATH, а не тот, который указанWindows использует для поиска foo.dll.Кроме того, foo.pyd не обязательно должен присутствовать для запуска вашей программы, тогда как если вы связали свою программу с dll, dll потребуется.Конечно, foo.pyd требуется, если вы хотите сказать import foo.В DLL связь объявляется в исходном коде с __declspec(dllexport).В .pyd связь определяется в списке доступных функций.

Изменение пути поиска Python , Абсолютный и относительный импорт

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