Jetson Nano上Python 3.11无法导入CUDA版OpenCV问题
解决Jetson Nano上Python 3.11无法导入编译版CUDA OpenCV的问题
问题背景
Jetson Nano默认搭载Jetpack 4.6.4与Python 3.6.9,自行编译安装Python 3.11后,通过源码编译带CUDA优化的OpenCV,make install显示文件已部署到/usr/lib/python3.11/site-packages/cv2目录,但Python 3.11执行import cv2时提示ModuleNotFoundError: No module named 'cv2'。
CMake配置确认Python 3.11的路径、numpy版本均正确,jtop显示OpenCV已安装,但导入失败。
解决方案步骤
1. 检查Python的site-packages路径优先级
执行以下命令查看Python 3.11的模块搜索路径:
python3.11 -c "import sys; print('\n'.join(sys.path))"
确认/usr/lib/python3.11/site-packages是否在输出列表中:
- 若不在,临时添加路径测试:
重新尝试export PYTHONPATH=/usr/lib/python3.11/site-packages:$PYTHONPATHimport cv2,若成功,可将该命令添加到~/.bashrc实现永久生效。 - 也可在
/usr/lib/python3.11/site-packages目录下创建opencv.pth文件,写入/usr/lib/python3.11/site-packages/cv2。
2. 检查OpenCV库文件权限
查看核心库文件的权限设置:
ls -l /usr/lib/python3.11/site-packages/cv2/python-3.11/cv2.cpython-311-aarch64-linux-gnu.so
确保权限为全局可读(例如-rw-r--r--),若权限不足,执行:
sudo chmod 644 /usr/lib/python3.11/site-packages/cv2/python-3.11/cv2.cpython-311-aarch64-linux-gnu.so
3. 验证库文件依赖完整性
使用ldd检查OpenCV库的依赖是否存在缺失:
ldd /usr/lib/python3.11/site-packages/cv2/python-3.11/cv2.cpython-311-aarch64-linux-gnu.so
若输出中出现not found的依赖项,安装对应的库文件(需匹配Jetpack 4.6.4的CUDA 10.2、cuDNN 8.2.1版本)。
4. 创建库文件的符号链接
编译后的OpenCV核心库位于cv2/python-3.11子目录,Python默认会从cv2根目录查找库文件,创建符号链接:
sudo ln -s /usr/lib/python3.11/site-packages/cv2/python-3.11/cv2.cpython-311-aarch64-linux-gnu.so /usr/lib/python3.11/site-packages/cv2/cv2.so
完成后重新尝试导入cv2。
5. 重新编译OpenCV(若上述步骤无效)
修改CMake编译参数,明确指定Python 3的包路径:
cmake \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_CUDA=ON \ -D CUDA_ARCH_BIN=5.3 \ -D CUDA_ARCH_PTX="" \ -D WITH_CUDNN=ON \ -D OPENCV_DNN_CUDA=ON \ -D WITH_TBB=ON \ -D BUILD_opencv_python3=ON \ -D PYTHON3_EXECUTABLE=/usr/bin/python3.11 \ -D PYTHON3_INCLUDE_DIR=/usr/include/python3.11 \ -D PYTHON3_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.11.so \ -D PYTHON3_PACKAGES_PATH=/usr/lib/python3.11/site-packages \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.11/dist-packages/numpy/core/include \ ..
然后重新执行make -j4和sudo make install。
内容的提问来源于stack exchange,提问作者user2410689
相关产品推荐
相关产品推荐

