Я новичок в CMake и не понимаю понимания некоторых концепций использования.
Я вызываю python script из С++-программы:
#include <Python.h>
...
Py_Initialize();
PyRun_SimpleFile(...);
Py_Finalize();
Соответствующие записи cmake в моем файле cmake:
FIND_PACKAGE(PythonLibs REQUIRED)
...
TARGET_LINK_LIBRARIES(MyApplication ${PYTHON_LIBRARIES})
Это работает до тех пор, пока мой python script не использует какие-либо модули, установленные в каталоге site-packages, иначе я получаю ImportError. Этот вопрос показывает, как найти расположение каталога сайтов-пакетов с помощью CMake, но что я должен сказать CMake об этом?
EDIT: проблема решена. Оказывается FIND_PACKAGE (PythonLibs) находит другую установку python из того, что я обычно использую (/usr/local/lib/libpython2.7.dylib вместо /Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2. 7.dylib - я нахожусь на mac), вот как я получаю стандартные модули python, но ни один из них я не установил сам. Чтобы изменить PYTHONPATH на нормальный, я добавил
try:
import some_package
except ImportError:
if "my_python_path" in sys.path: raise
sys.path.append("my_python_path")
в верхней части моего python script.