Linuz Python Module using PythonC/ API

David dlegault at vantpoint.com
Tue May 24 15:19:06 EDT 2005


I have this error message poping up when I try to import a module I made in C
using the Python/C API. Everything compiles like a charm.

Gives me this error message :

Traceback (most recent call last):
  File "mod_test.py", line 4, in ?
    import utm
ImportError: dynamic module does not define init function (initutm)

but the "initutm" function is there.

Running on Fedora Core 3.

Thanx 
David

P.S Other question is there a command to know what export symbols a .so library
has ?

Relevant files below.

utmmodule.c
------------------
#include <Python.h>

#include "utm.h"


PyMODINIT_FUNC initutm(void);

static PyObject * utm_utm_to_ll(PyObject * self, PyObject * args);

static PyObject * utm_ll_to_utm(PyObject * self, PyObject * args);

static PyObject * utm_zone(PyObject * self, PyObject * args);

static PyObject * utm_grid(PyObject * self, PyObject * args);

static PyObject * utm_trans_list(PyObject * self, PyObject * args);

static PyObject * utm_transform(PyObject * self, PyObject * args);



/****************************************/

/*! \var static PyObject * UTMError

    \brief UTM Python Module error handling object

*/

/****************************************/

static PyObject * UTMError;



/****************************************/

/*! \var static PyMethodDef UTMMethods 

    \brief UTM Python Module function list

*/

/****************************************/

static PyMethodDef UTMMethods[] = {

  

  {"utm_to_ll",  utm_utm_to_ll, METH_VARARGS, "Converts UTM coordinates to
Lat/Long using the input UTM zone number and letter and tranformation."},

  {"ll_to_utm",  utm_ll_to_utm, METH_VARARGS, "Converts Lat/Long coordinates to
UTM using the input transformation."},

  {"zone",  utm_zone, METH_VARARGS, "Returns the UTM longitude zone number."},

  {"grid",  utm_grid, METH_VARARGS, "Returns the UTM latitude zone letter (C to
X) - omiting chars I and O.\nReturns Z if Latitude value out of UTM bounds 84N -
80S."},

  {"trans_list",  utm_trans_list, METH_VARARGS, "Returns the list of available
ellipsoid transformations in a list."},  

  {"transform",  utm_transform, METH_VARARGS, "Returns the tranform index based
on the transform type string, EX: 'WGS 84' returns index 29"},  

  {NULL, NULL, 0, NULL}        /* Sentinel */

};



/****************************************/

/*! \fn PyMODINIT_FUNC initutm(void)

    \brief Python Module __init__() function



    This function is called when the module is loaded by Python. It creates a
mapping of the

    python module commands linked to their C counterpart in the DLL/SO module.
It also creates

    an error handling Python object (UTMError).

*/

/****************************************/



PyMODINIT_FUNC initutm(void) {

  

  PyObject *m;

  

  m = Py_InitModule( "utm", UTMMethods );

  

  UTMError = PyErr_NewException( "utm.error", NULL, NULL );

  Py_INCREF( UTMError );

  PyModule_AddObject( m, "error", UTMError );

}
....
------------------

makefile important lines
-------------------
CC=g++

CFLAGS=-Wall -I/usr/local/src/Python-2.3.5/Include
-L/usr/local/src/Python-2.3.5/Objects -L/usr/local/src/Python-2.3.5

LDFLAGS=



all: main



main: utm.o utmmodule.o

	$(CC) $(CFLAGS) -shared -fPIC -Xlinker -export-dynamic -lpython2.3 -o utm.so

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




More information about the Python-list mailing list