Так я создал два модуля, используя подталкивание :: питон:Импорт зависимых библиотек питона от повышающего питона
BOOST_PYTHON_MODULE(A) { ... }
BOOST_PYTHON_MODULE(B) { ... }
, что В зависит от А. Затем я пытаюсь вызвать их, используя код Python:
import sys
sys.path.append('path/to/modules/')
import A
import B
... # python body
Наконец я называю сценарий питона из терминала:
python path/to/python/script.py
Это отлично работает до тех пор, как я execut e команда терминала из каталога, где я установил модули boost :: python. Однако, если я называю его от любого другого каталога, я получаю ошибку
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
Обратите внимание, он не на «импорт B», поэтому команда sys.path.append направляет его в нужное место. По какой-то причине библиотеки boost :: python не выглядят в каталогах sys.path? Есть ли способ установить это? Я попытался добавить путь в boost python, но это, похоже, влияет только на время компиляции библиотек, а не на запуск python.
Кто-нибудь знает, что делать?
Спасибо!
Почему вы хотите развернуть lib? Вы можете установить зависимости во время компиляции – balki
@balki: 'dlopen' является частью поведения' import'. Без статической привязки расширений в интерпретаторе, как иначе интерпретатор для динамического языка загружает библиотеку C++? –