python - 如何将带有 Python 绑定的 C 库编译到多个虚拟环境中?
问题描述
在过去的几个月里,我一直在使用 Python 绑定的 OpenCV,我发现确保 OpenCV 使用加速和其他库(例如 CUDA、GStreamer)的最简单方法是自己“制作”它。这将涉及从目标平台上的源代码构建 OpenCV,然后复制一些“.so”文件。但是,我遇到了两个我认为相关的问题:
- IntelliJ 拒绝接收 cv2 库。我可以忍受,但不能使用我的工具很烦人。
- 我不知道如何将库链接到不同的 virtualenv - 所以我必须为每个新环境重新编译它
我一直在关注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 等)而重新编译它时,我希望这种更改会传播到我的所有安装。
对此的任何帮助或指示将不胜感激!
解决方案
推荐阅读
- google-apps-script - 如何在 gmail 插件中获取客户的时间?
- javascript - 使用 Ember 刷新语义 UI 粘性不起作用
- javascript - JS | 字符串被第一个空格分割
- sql - 从最大列值分组唯一行
- python - Python Traceback(最近一次调用最后一次)错误
- javascript - Javascript / React - 不重复自己的最佳方式
- javascript - 在弹出窗口中显示 php echo 输出
- webpack - Laravel 混合和自定义 javascript 文件的通配符
- assembly - 处理器可以同时进行内存和算术运算吗?
- java - FileNotFoundException 的 Java 无法访问的 catch 块