conda env 嵌套导致bug

**起因:**想要添加新的功能,为了防止已经配置好的conda环境被破坏,因此复制了conda env,遇到了几个问题。
问题:
1.torchvision和其他几个包提示不存在,但其实在原env中都是存在的,且正常使用。
2.opencv报错,主要原因是sift特征点匹配专利限制问题,原本的env中是3.4.2.16,可以正常使用。
最终结论:
conda 的 env 之间存在嵌套关系,在虚拟环境中可以再次进入虚拟环境,从而引发一系列迷之bug。
如果自己的虚拟镜像存在嵌套,使用conda deactivate退回到base环境,再进入虚拟镜像可以解决。

conda deactivate 

中途在发现需要退出环境之前,也解决了一点点问题,但是感觉操作应该是误打误撞了。
误打误撞的未必正确的解决办法:
针对1.,估计是误打误撞解决的,方法是重新安装报错和提示缺失的包,其中torchvision我是输入的安装pytorch的完整指令重装的,这里装的是1.7.0的torch。

pip install torch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0

结果是提示我这些东西我已经装了,torchvision也莫名的可以用了。
其余包正常安装后不在报错。
针对2.,在其余包正常后,opencv开始提示sift的专利问题module ‘cv2.cv2’ has no attribute ‘xfeatures2d’,此时conda list 显示我的python版本为3.6.9,opencv版本为3.4.2.16,原始env运行正常,复制的新env看起来也正常,但是错误持续存在。
因此想故技重施,重新安装3.4.2.16“冲一冲”,结果提示ERROR: No matching distribution found for opencv-python==3.4.2.16
根据搜索,应该是python版本不对,3.4.2.16在python3.8后不再支持(参考自:https://www.pythonheidong.com/blog/article/889021/8406cf9cb74af2dafac0/),因此需要更正python的版本。
可是我的版本本来就低于3.8呀,3.6.9>3.8?
出于侥幸心理,重装python3.6.9,提示已经是3.6.9了,但是ERROR仍然存在。使用python --version查看版本,发现竟然是python3.7.3。3.7.3?哪里来的呢,好奇怪啊,而且3.7.3>3.8?
抱着试试看的态度,开始检索“python --version 和 conda list 显示的版本不一样”的解决办法,终于找到了真正的解决方案!
感谢G_inkk在两个月前提供的新鲜解决方案!(参考自:https://blog.csdn.net/G_inkk/article/details/120865842
完结撒花!哭唧唧。

猜你喜欢

转载自blog.csdn.net/a272881819/article/details/122132196
env