首页 > 解决方案 > 如何将带有 Python 绑定的 C 库编译到多个虚拟环境中?

问题描述

在过去的几个月里,我一直在使用 Python 绑定的 OpenCV,我发现确保 OpenCV 使用加速和其他库(例如 CUDA、GStreamer)的最简单方法是自己“制作”它。这将涉及从目标平台上的源代码构建 OpenCV,然后复制一些“.so”文件。但是,我遇到了两个我认为相关的问题:

我一直在关注Adrian精彩指南的修改版本。

假设您已经克隆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 更新、英特尔 AVX512 等)而重新编译它时,我希望这种更改会传播到我的所有安装。

对此的任何帮助或指示将不胜感激!

标签: pythonpython-3.xopencvvirtualenv

解决方案


推荐阅读