libreria importar gestion clases archivos c++ python boost-python

c++ - gestion - ¿Cómo importar el módulo python desde el archivo.so?



importar clases en python (2)

Debe llamarse hello_world.so , no libhello_world.so .

[me@hostname python]$ cat hello_world.cc #include <string> #include <Python.h> #include <boost/python.hpp> namespace { std::string greet() { return "Helloworld"; } } using namespace boost::python; BOOST_PYTHON_MODULE(hello_world) { def("greet",greet); } [me@hostnmae python]$ g++ -c -fPIC hello_world.cc -I/path/to/boost/headers -I/path/to/python/headers -o hello_world.o [me@hostname python]$ g++ -shared -Wl,-soname,libhello_world.so -o libhello_world.so hello_world.o [me@hostname python]$ python Python 2.7.1 (r271:86832, Jan 10 2011, 09:46:57) [GCC 3.4.5 20051201 (Red Hat 3.4.5-2)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path.append(''.'') >>> import hello_world Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named hello_world >>>

Creé el archivo .so como se muestra arriba, pero no puedo importar dentro de Python. ¿Qué me estoy perdiendo?


tome ese archivo ''hello_world.so'' y haga un nuevo archivo de Python (en el mismo directorio) llamado ''hello_world.py''. Ponga el siguiente código en él ...

def __bootstrap__(): global __bootstrap__, __loader__, __file__ import sys, pkg_resources, imp __file__ = pkg_resources.resource_filename(__name__,''hello_world.so'') __loader__ = None; del __bootstrap__, __loader__ imp.load_dynamic(__name__,__file__) __bootstrap__()

Ahora puedes importar este hello_world como:

>>> import hello_world