模块导入时的 boost.python 代码
当我的 C++ 库导入到 Python 中时,我需要调用 InitGoogleLogging() 。我的 C++ 库使用 Boost.Python。
导入库后如何调用函数?
I need to call InitGoogleLogging() when my C++ library is imported in Python. My C++ library uses Boost.Python.
How do I call functions when the library is imported?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
python 中没有真正的“定义”。当您导入时,您放入 .py 模块中的任何代码都会执行。大多数情况下,放入包文件中的代码都是“定义”代码,例如 class 或 def。实际上,该代码仍然会被执行,它只是创建类和函数定义作为结果。从模块中的根命名空间(缩进)调用函数将导致该函数在模块加载后立即被调用。
只需将它们放入 __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):
另一种选择是直接从 C++ 包装器模块调用它:
There are no real "definitions" in python. Any code you put in a .py module is executed when you import it. It just happens to be that most of the time the code put in the package files is the "definiton" code like class or def. In practice, that code still gets executed, it just creates your class and function definitions as a result. Calling a function from the root namespace (indentation) in the module will cause it to get called as soon as the module is loaded.
Just put them into the __init__.py. See http://www.boost.org/doc/libs/1_45_0/libs/python/doc/tutorial/doc/html/python/techniques.html#python.extending_wrapped_objects_in_python where it talks about exporting your package with an alias and then flatning your namespace in init.py.
i.e. (this would be __init__.py in a a subdirectory named foo):
Another alternative is calling it directly from the C++ wrapper module: