模块导入时的boost.python代码

Nei*_*l G 2 python boost-python

我的C++库是用Python导入的,我需要调用InitGoogleLogging().我的C++库使用Boost.Python.

导入库时如何调用函数?

Ale*_*kiy 6

python中没有真正的"定义".放入.py模块中的任何代码都会在导入执行.恰好在包文件中放置代码的大部分时间都是像classdef这样的"definiton"代码.实际上,该代码仍然会被执行,因此它只会创建您的类和函数定义.从模块中的根命名空间(缩进)调用函数将导致在加载模块后立即调用它.

只需将它们放入__init__.py即可.请参阅http://www.boost.org/doc/libs/1_45_0/libs/python/doc/tutorial/doc/html/python/techniques.html#python.extending_wrapped_objects_in_python,其中讨论了使用别名导出包,然后在init .py中压缩命名空间.

即(这将是一个名为foo的子目录中的__init__.py):

from _foo import *

InitGoogleLogging()
Run Code Online (Sandbox Code Playgroud)

另一种方法是直接从C++包装器模块调用它:

BOOST_PYTHON_MODULE(foo)
{
    InitGoogleLogging();

    class_<Foo>("Foo")
        .def("bar", &bar)
    ;
}
Run Code Online (Sandbox Code Playgroud)