Как мне скомпилировать библиотеку C с привязками Python в нескольких виртуальных средах? - PullRequest
0 голосов
/ 16 января 2019

В последние несколько месяцев я работал с OpenCV с привязками Python и обнаружил, что самый простой способ убедиться, что OpenCV использует ускорения и другие библиотеки (например, CUDA, GStreamer), состоит в том, чтобы «сделать» его самому. Это может включать сборку OpenCV из исходного кода на целевой платформе, а затем копирование некоторых файлов ".so". Однако я столкнулся с двумя проблемами, которые, как мне кажется, связаны между собой:

  • IntelliJ отказывается брать библиотеку cv2. Я могу жить с этим, но раздражает, что я не могу использовать мои инструменты.
  • Я не знаю, как связать библиотеку с другим virtualenv - поэтому мне приходится перекомпилировать ее для каждой новой среды

Я следил за измененной версией фантастического руководства Адриана .

Предполагая, что вы уже клонировали opencv и opencv_contrib и находитесь в виртуальной среде по вашему выбору:

PYTHON_VERS=python$(python -c "import sys; print('%s.%sm' % (sys.version_info.major, sys.version_info.minor))")
PYTHON_VERS_NO_MALLOC=python$(python -c "import sys; print('%s.%s' % (sys.version_info.major, sys.version_info.minor))")
PYTHON_ROOT=$(python -c "import sys; print(sys.prefix)")
export CPLUS_INCLUDE_PATH=${PYTHON_ROOT}/include/${PYTHON_VERS}/
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-DPYTHON_INCLUDE_DIR=${PYTHON_ROOT}/include/${PYTHON_VERS}/ \
-DPYTHON_LIBRARY=${PYTHON_ROOT}/lib/lib${PYTHON_VERS}.dylib \
-DPYTHON_EXECUTABLE=${PYTHON_ROOT}/bin/python \
-DPYTHON_PACKAGES_PATH=${PYTHON_ROOT}/lib/${PYTHON_VERS}/site-packages/ \
-D CMAKE_INSTALL_PREFIX=~/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D WITH_FFMPEG=ON \
-D WITH_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_GSTREAMER=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
make -j12 > opencvbuild.log 2>&1 &
make install
cp ~/local/lib/${PYTHON_VERS_NO_MALLOC}/site-packages/cv2.*.so ${PYTHON_ROOT}/lib/${PYTHON_VERS_NO_MALLOC}/site-packages/cv2.so

Я надеюсь, что это возможно - это скомпилировать OpenCV только один раз, а затем повторно использовать его во всех моих средах. Не только это, но и когда я перекомпилирую его из-за изменений бинарной зависимости (например, новая поддержка OpenCL / CUDA, обновления GStreamer, Intel AVX512 и т. Д.), Я ожидаю, что это изменение распространится на все мои установки.

Буду очень признателен за любую помощь или указатели на это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...