New submission from Václav Šmilauer: I have several compiled modules linked into one .so file and import them using imp.load_dynamic.
Only the first module imported with load_dynamic is imported properly, all subsequent calls of load_dynamic on the same file ignore the first argument (name) and return the first module again. The init function is also called only for the first module imported by load_dynamic. The bug is reproducible for python 2.7.3 and 3.2.2. Test case is attached. Here inline simplified source for 2.7: foo.c: #include<stdio.h> #include<Python.h> PyMODINIT_FUNC initfoo(){ (void) Py_InitModule("foo",NULL); printf("initfoo()\n"); } PyMODINIT_FUNC initbar(void){ (void) Py_InitModule("bar",NULL); printf("initbar()\n"); } PyMODINIT_FUNC initbaz(void){ (void) Py_InitModule("baz",NULL); printf("initbaz()\n"); } test.py: import sys,imp # import foo using the normal machinery sys.path.append('.') import foo # this is OK print imp.load_dynamic('bar','foo.so') # this imports *bar* again, but should import baz print imp.load_dynamic('baz','foo.so') # this imports *bar* again, although the module is not defined at all print imp.load_dynamic('nonsense','foo.so') Compiled with gcc -shared -fPIC foo.c -o foo.so `pkg-config python --cflags --libs` I get when running "python test.py" output: initfoo() initbar() <module 'bar' from 'foo.so'> <module 'bar' from 'foo.so'> <module 'bar' from 'foo.so'> The module 'bar' is imported 3 times, although the 2nd import should import *baz* and the third import should fail ("nonsense" module does not exist). ---------- components: Library (Lib) files: load_dynamic-test.zip messages: 172632 nosy: eudoxos priority: normal severity: normal status: open title: imp.load_dynamic imports wrong module when called several times on a multi-module .so type: behavior versions: Python 2.7 Added file: http://bugs.python.org/file27527/load_dynamic-test.zip _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue16194> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com