C++ 从boostpython导入依赖的python库
因此,我使用boost::python创建了两个模块:C++ 从boostpython导入依赖的python库,c++,python,boost,boost-python,C++,Python,Boost,Boost Python,因此,我使用boost::python创建了两个模块: BOOST_PYTHON_MODULE(A) { ... } BOOST_PYTHON_MODULE(B) { ... } 这样B依赖于A。然后我尝试使用python代码调用它们: import sys sys.path.append('path/to/modules/') import A import B ... # python body 最后,我从终端调用python脚本: python path/to/python/scr
BOOST_PYTHON_MODULE(A) { ... }
BOOST_PYTHON_MODULE(B) { ... }
这样B依赖于A。然后我尝试使用python代码调用它们:
import sys
sys.path.append('path/to/modules/')
import A
import B
... # python body
最后,我从终端调用python脚本:
python path/to/python/script.py
只要我在安装boost::python模块的目录中执行terminal命令,这就可以完美地工作。但是,如果我从任何其他目录调用它,就会得到错误
File "path/to/python/script.py", line 6, in <module>
import B
importError: dlopen(path/to/B.so, 2): Library not loaded: A.so
Referenced from: path/to/B.so
Reason: image not found
文件“path/to/python/script.py”,第6行,在
进口B
导入错误:dlopen(路径/to/B.so,2):库未加载:A.so
引用自:路径/to/B
原因:找不到图像
请注意,它在“导入B”时失败,因此sys.path.append命令将其定向到正确的位置。出于某种原因,boost::python库不在sys.path目录中查找?有没有办法设定这个?我尝试在boostpython中添加路径,但这似乎只会在库的编译时起作用,而不会在python运行时起作用
有人知道该怎么做吗
谢谢 如果
B.so
链接到A.so
,则加载B.so
时,A.so
需要位于动态链接器使用的路径中。例如,在导入模块B
之前,将包含A.so
的路径添加到LD\u LIBRARY\u path
环境变量中
库和模块之间有区别<因此是一个库,而不是一个模块。在尝试导入模块时,Python可能最终尝试加载库,要求库初始化模块。在这种情况下,库A.so
在Python解释器加载模块A
时初始化该模块。的文档说明它指定了模块的搜索路径。因此,import B
将找到B.so
,作为import
和sys.path
行为的一部分。但是,当动态链接器加载B.so
时,动态链接器(而不是Python解释器)需要解析A.so
有关加载库时检查的路径的更多信息,请考虑咨询动态链接器。为什么要打开库?您可以在compile中设置依赖项time@balki:dlopen是导入行为的一部分。如果没有静态地解释解释器中的扩展,那么动态语言的解释器会如何加载C++库?