Embedded Python interpreter and sockets
Hi, Here is a problem I came across and need some help with. I developed a little Python script with some classes which runs standalone and communicates with a database via sockets. So far everything works fine. I also successfully embedded the Python interpreter into a plugin for a commercial 3D package (in this case Houdini - http://www.sidefx.com/ - using the HDK). I can use the interpreter to run Python commands and get values back and forth between Python and C++. Anyway, I can also successfully import SOME modules, but unfortunately not ALL. One example would be the socket module which works fine in the standalone version of my Python script but NOT from the embedded interpreter: Traceback (most recent call last): File "", line 40, in ? File "/swdevl/jwalter/Houdini/ROPS/HoudiniToMayaBake/damn.py", line 10, in ? import socket File "/job/SYSTEMS/3PS/python/2.4.1/linux_intel//lib/python2.4/socket.py", line 45, in ? import _socket ImportError: /job/SYSTEMS/3PS/python/2.4.1/linux_intel/lib/python2.4/lib-dynload/_socket.so: undefined symbol: PyObject_GenericGetAttr Other modules which get imported before just work fine (e.g. re and string) ... The Python library gets linked into the plugin DSO as a static library ... Any ideas what's going wrong and why? Cheers, Jan -- http://mail.python.org/mailman/listinfo/python-list
Re: Embedded Python interpreter and sockets
Hi Chris, Thanks for your help. I'll try that ... Cheers, Jan -- http://mail.python.org/mailman/listinfo/python-list
Re: Embedded Python interpreter and sockets
Hey Chris,
I fixed the problem in another way (don't ask me why that works). One
detail I didn't talk about is that I use the Boost.Python library. So I
just made sure that I load the socket module before I import my own
Python script (using that socket module):
...
object
main_module((handle<>(borrowed(PyImport_AddModule("__main__");
object
socket_module((handle<>(borrowed(PyImport_AddModule("socket");
object main_namespace = main_module.attr("__dict__");
handle<>
result((allow_null(PyRun_String("...",
Py_file_input,
main_namespace.ptr(),
main_namespace.ptr();
...
Maybe someone can shed some light on what's going on here but for the
moment I'm happy that it works at all !!!
Cheers,
Jan
--
http://mail.python.org/mailman/listinfo/python-list
Re: Embedded Python interpreter and sockets
Hi, actually that didn't solve the problem. As soon as you do something with the socket module it fails. Well, the solution I came up with is simply link the ../_socket.so into my Houdini plugin DSO which is ugly but solves the problem for the moment ... Happy hacking, Jan -- http://mail.python.org/mailman/listinfo/python-list
