Anaconda环境下非根目录无法导入OpenCV问题求助
问题:Conda环境下切换目录后OpenCV导入失败,VSCode调用Python版本异常
错误复现步骤
我在新创建的Python 3.7.11版本Conda环境中,执行以下命令安装OpenCV:
conda install opencv
安装过程无报错,Conda自动下载解压了包括numpy-1.21.2在内的依赖包,最终安装的opencv版本为3.4.2。
在系统根目录下通过终端执行以下代码,运行完全正常,可以正常输出cv2版本号:
python >> import cv2 >> cv2.__version__
但切换到其他目录(例如~/Downloads)执行相同代码时就会报错,错误信息如下:
Python 3.7.11 (default, Jul 27 2021, 07:03:16) [Clang 10.0.0 ] :: Anaconda, Inc. on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 ImportError: numpy.core.multiarray failed to import Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: numpy.core.multiarray failed to import
其他异常情况
在VSCode中选择相同的Conda环境执行代码,也出现相同问题。同时VSCode终端输入python命令时,调用的是系统自带的Python 2.7版本,日志如下:
│ ~ source /opt/anaconda3/bin/activate 1 ✘ │ base │ 08:09:48 PM │ ~ conda activate testenvi ✔ │ base │ 08:09:48 PM │ ~ python -u "/Users/martinmanullang/Downloads/testsiopencv.py" ✔ │ testenvi │ 08:09:49 PM Traceback (most recent call last): File "/Users/martinmanullang/Downloads/testsiopencv.py", line 1, in <module> import cv2 ImportError: No module named cv2 │ ~ python 1 ✘ │ testenvi │ 08:09:53 PM WARNING: Python 2.7 is not recommended. This version is included in macOS for compatibility with legacy software. Future versions of macOS will not include Python 2.7. Instead, it is recommended that you transition to using 'python3' from within Terminal. Python 2.7.18 (default, Oct 2 2021, 04:20:39) [GCC Apple LLVM 13.0.0 (clang-1300.0.29.1) [+internal-os, ptrauth-isa=deploymen on darwin Type "help", "copyright", "credits" or "license" for more information. >>>
已尝试的解决步骤
- 使用
pip install opencv-contrib-python重新安装OpenCV - 分别通过pip、conda重新安装numpy
- 创建Python 3.5、3.6、3.9版本的新环境重试
以上方法均未解决问题。
系统配置信息
- 2020款MacBookPro,运行macOS Monterey系统
- VSCode版本1.61.2
- 搭载ZSH的iTerm 3.4.12终端
解决方案
根因说明
两个异常分别对应两个独立问题:
- 切换目录导入报错:当前工作目录存在和
numpy、cv2同名的Python文件或缓存,Python导入模块时优先读取当前目录下的文件,导致环境中的标准库被覆盖无法正常加载 - VSCode终端Python版本不对:ZSH配置中Conda环境的路径优先级低于系统Python路径,且VSCode终端未正确继承环境变量
具体操作步骤
- 清理目录同名冲突文件
切换到报错的~/Downloads目录,执行以下命令查找冲突文件:
ls | grep -E "(numpy|cv2)\.py|__pycache__"
如果输出了numpy.py、cv2.py或者同名目录、缓存文件,直接将这些文件重命名或者删除,再重试导入cv2即可。
2. 修复ZSH的Conda环境配置
执行以下命令完成Conda的ZSH初始化:
conda init zsh
执行完成后重启终端或者执行source ~/.zshrc使配置生效。激活目标环境后执行which python,正常输出应为/opt/anaconda3/envs/你的环境名/bin/python,如果仍指向系统Python路径,手动在~/.zshrc文件末尾添加以下内容(替换为你自己的环境路径):
export PATH="/opt/anaconda3/envs/testenvi/bin:$PATH"
- 修复VSCode终端配置
- 打开VSCode设置,搜索
terminal.integrated.inheritEnv,勾选该选项保证终端继承系统环境变量 - 打开目标Python文件,点击左下角的Python版本选择器,选择对应Conda环境的Python 3.7版本,不要选择系统自带的Python 2.7
- 关闭所有已打开的VSCode终端,重新打开新终端激活环境后,执行
python --version验证版本是否正确
- 强制匹配numpy版本
如果仍存在numpy导入报错,激活环境后执行以下命令重装对应版本numpy:
pip uninstall -y numpy && conda install -y numpy=1.21.2
内容的提问来源于stack exchange,提问作者amisotcm
相关产品推荐
相关产品推荐

