سؤال

التالية هذه على سبيل المثال ، لقد قمت بإنشاء ملف مكتبة Hello.pyd Little ، والتي تكون محتوياتها في نهاية هذا السؤال.

عندما أدخل مترجم بيثون ، أحصل على ما يلي:

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);
}

الإعداد

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
هل كانت مفيدة؟

المحلول

يمكنك محاولة استخدام مدرع, ، لكنه لم ير الكثير من العمل مؤخرًا.

نصائح أخرى

الجواب على الأرجح أن مكتبة .pyd الخاصة بك ليست في المسار الصحيح لـ IronPython لاستلامها. نظرًا لأنك استخدمت Python وليس أدوات إعداد IronPython ، فمن المحتمل أن يتم بناؤها وإعدادها في Pythonpath بدلاً من المكان الذي يجب أن يكون فيه IronPython.

الحل هو

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top