Не удалось импортировать C ++ dll в Python - PullRequest
2 голосов
/ 31 марта 2010

Следуя документу «Расширение и встраивание интерпретатора Python», я создал проект VC, и файл dll успешно создан с именем «spam_d.dll»

Основной код был

static PyObject *
spam_system(PyObject *self, PyObject *args)
{
    const char *command;
    int sts;

    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL;
    sts = system(command);
    return Py_BuildValue("i", sts);
}

static PyMethodDef SpamMethods[] = {
    {"system",  spam_system, METH_VARARGS, "Execute a shell command."},
    {NULL, NULL, 0, NULL}        /* Sentinel */
};

PyMODINIT_FUNC
initspam(void)
{
    (void) Py_InitModule("spam", SpamMethods);
}

Затем я набрал в python следующую команду:

импорт спама [39003 ссылки] spam.system ( "PWD") / SVN / Python / PCbuild 0 [39005 ссылок]

Это выглядит правильно. Но когда я переименую имя DLL из spam_d.pyd в spam.pyd. Python не может найти модуль.

>>> import spam
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named spam
[39005 refs]

Из первого случая, похоже, Python мог правильно установить отношения между "import spam" и "spam_d.pyd".

Откуда python узнал, что модуль "спам" - это "spam_d.pyd", но не "spam.pyd"?

И есть ли в документах упоминание об этом.

1 Ответ

1 голос
/ 05 февраля 2012

Питон пытается связать библиотеку отладки с суффиксом _d.pyd, поскольку это сборка отладки. Чтобы связать aganist spam.pyd, вам нужна версия Release.

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