[Python-Dev] Embedding demos are broken
Guido van Rossum
guido@digicool.com
Tue, 20 Feb 2001 16:40:07 -0500
> Something changed recently, and now the Demo/embed programs are
> broken, e.g.
>
> % ./loop pass 2
> Could not find platform independent libraries <prefix>
> Could not find platform dependent libraries <exec_prefix>
> Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
> 'import site' failed; use -v for traceback
> Segmentation fault (core dumped)
>
> The crash is happening in the second call to init_exceptions()
>
> (gdb) where
> #0 PyModule_GetDict (m=0x0) at Objects/moduleobject.c:40
> #1 0x8075ea8 in init_exceptions () at Python/exceptions.c:1058
> #2 0x8051880 in Py_Initialize () at Python/pythonrun.c:147
> #3 0x80516db in main (argc=3, argv=0xbffffa34) at loop.c:28
>
> because the attempt to import __builtin__ returns NULL. I don't have
> time right now to look any deeper, but I suspect that the crash may be
> due to changes in the semantics of PyImport_ImportModule() which now
> goes through __import__.
>
> I'm posting this in case someone with spare cycles can look at it.
>
> -Barry
This was probably broken since PyImport_Import() was introduced in
1997! The code in PyImport_Import() tried to save itself a bit of
work and save the __builtin__ module in a static variable. But this
doesn't work across Py_Finalise()/Py_Initialize()! It also doesn't
work when using multiple interpreter states created with
PyInterpreterState_New().
So I'm ripping out this code. Looks like it's passing the test suite
so I'm checking in the patch. It looks like we need a much more
serious test suite for multiple interpreters and repeatedly
initializing!
--Guido van Rossum (home page: http://www.python.org/~guido/)