Импорт библиотеки * .pyd в интерпретаторе IronPython (ipy.exe) - PullRequest
2 голосов
/ 06 ноября 2010

Следуя этому примеру, я создал небольшой библиотечный файл hello.pyd, содержимое которого находится в конце этого вопроса.

Когда я вхожу в pythonинтерпретатор Я получаю следующее:

D:\test\build\lib.win32-2.6>C:\Python26\python.exe
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import hello
>>> hello.say_hello("Greg")
Hello Greg!
>>>

Но попытка сделать это с помощью интерпретатора IronPython приводит к ошибке:

D:\test\build\lib.win32-2.6>"C:\Program Files (x86)\IronPython 2.7\ipy.exe"
IronPython 2.7 Alpha 1 (2.7.0.1) on .NET 4.0.30319.1
Type "help", "copyright", "credits" or "license" for more information.
>>> import hello
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named hello
>>>

Как я могу заставить интерпретатор ipy принимать эту скомпилированную библиотеку C ++?


hellomodule.cpp

#include "C:\Python26\include\Python.h"

static PyObject* say_hello(PyObject* self, PyObject* args)
{
    const char* name;

    if (!PyArg_ParseTuple(args, "s", &name))
        return NULL;

    printf("Hello %s!\n", name);

    Py_RETURN_NONE;
}

static PyMethodDef HelloMethods[] =
{
     {"say_hello", say_hello, METH_VARARGS, "Greet somebody."},
     {NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC

inithello(void)
{
     (void) Py_InitModule("hello", HelloMethods);
}

setup.py

from distutils.core import setup, Extension

module1 = Extension('hello', sources = ['hellomodule.cpp'])

setup (name = 'PackageName',
        version = '1.0',
        description = 'This is a demo package',
        ext_modules = [module1])

Составлено следующим образом

python setup.py build -cmingw32

Ответы [ 2 ]

3 голосов
/ 06 ноября 2010

Вы можете попробовать использовать Ironclad , но в последнее время он не видел много работы.

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

Ответ, скорее всего, заключается в том, что ваша библиотека .pyd неверна для того, чтобы IronPython мог ее найти.Поскольку вы использовали Python, а не инструменты установки IronPython, он, вероятно, был собран и настроен в PYTHONPATH, а не в том месте, где он должен быть для IronPython.

Решение состоит в том, чтобы.) Изменить путь для IronPython или b.) перестроить по пути IronPython

...