ImportError in python 2.5 in C API DLL

H

Henrik

Hi,

We are upgrading from Python 2.3 to verion 2.5 and when we recompile
we get ImportError.

To test we took the spam example from the web documentation and
compiled it with Py23 and it imports without a problem. Changing the
libs in visual studio 2008 to point to Py25 and we get:
Traceback (most recent call last):

Would really appreciate any assistance.

H

----------------------------------------------------------------------------------------------------------------------
#include "stdafx.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
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 PyBSMethods[] = {
{"spam", (PyCFunction) spam_system, METH_VARARGS|METH_KEYWORDS,
"Hi"},
{NULL, NULL, 0, NULL} /* Sentinel */
};
extern "C" {
__declspec(dllexport) void initspam(void)
{
PyObject* module = Py_InitModule("spam", PyBSMethods);
PyObject* d = PyModule_GetDict(module);
}
}
----------------------------------------------------------------------------------------------------------------------
 
M

Matimus

Hi,

We are upgrading from Python 2.3 to verion 2.5 and when we recompile
we get ImportError.

To test we took the spam example from the web documentation and
compiled it with Py23 and it imports without a problem. Changing the
libs in visual studio 2008 to point to Py25 and we get:

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



Would really appreciate any assistance.

H

----------------------------------------------------------------------------------------------------------------------
#include "stdafx.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                               )
{
    return TRUE;}

#ifdef _MANAGED
#pragma managed(pop)
#endif
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 PyBSMethods[] = {
      {"spam", (PyCFunction) spam_system, METH_VARARGS|METH_KEYWORDS,
"Hi"},
      {NULL, NULL, 0, NULL}        /* Sentinel */};

extern "C" {
      __declspec(dllexport) void initspam(void)
      {
            PyObject* module = Py_InitModule("spam", PyBSMethods);
            PyObject* d = PyModule_GetDict(module);
      }}

----------------------------------------------------------------------------------------------------------------------

What about the simple stuff like: did you put your dll/pyd file where
python 2.5 can find it? Are you including the correct Python.h, are
you linking against the correct library (python25.lib or
python25_d.lib)? Have you tried debugging with the "python -v" option
(shows import trace messages)?

Matt
 
M

Martin v. Löwis

Would really appreciate any assistance.

You should change your project to create a .pyd file instead of a .dll
file.

Regards,
Martin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,969
Messages
2,570,161
Members
46,708
Latest member
SherleneF1

Latest Threads

Top