一个Anaconda2下import yaml失败:ImportError: No module named yaml的问题以及解决
承接前几天我抱怨的,实验室没有足够的电脑用来跑数据,恰好学校的高性能计算平台 北京大学高性能计算平台http://hpc.pku.edu.cn 上了线,所以和导师一合计就赶快去申请了账号。
平台大概的情况是,联想深腾X8800超级计算机系统一套,由总共227个节点组成,总计7008个CPU核心、20个GPU(Tesla P100)核心,总体计算能力达到384.8TFLOPS,其中计算节点计算能力达到260TFLOPS,GPU及KNL总计算能力达到124.8TFLOPS,存储容量2057TB。操作系统是Linux redhat 7.3 64bit,作业调度用的是Slurm 17.02。python环境由Anaconda提供。
申请到帐号后为了评估一下平台的可用性并熟悉下平台的使用,我们找了一套现成的深度学习代码要在上面跑一下,这套代码的说明中指明需要pytorch torchvision cuda80 yaml=0.1.6 opencv=2.4.11 和 tensorboard,按照说明给的conda安装命令安装这些需要的包在本地的机器上跑没有问题,但是在学校的高性能计算平台上却有了麻烦。
这个平台的工作方式是老派的大型机使用方式,一台主机通过终端向多个用户提供服务。所以我们这些普通用户并没有安装软件和python包的权限,想要安装自己需要的包只能在自己conda create的虚拟环境里装,然而将所有包都安装好之后,运行代码时却提示:
ImportError: No module named yaml
然而用conda list却能看到明晃晃的yaml列在那里。
然后我又尝试了多次,发现:
- 在没有激活任何conda虚拟环境时,系统默认的conda环境里,conda list 有yaml,并且import成功
- 新建了一个空的conda虚拟环境A,conda list空,import yaml成功
- 在conda虚拟环境A中conda install yaml,conda list 有yaml以及依赖项,import yaml成功,然后安装pytorch torchvision cuda80 opencv,import yaml失败
看样子似乎是安装上面这些包时某个包或者依赖的包和yaml起了冲突。我当时甚至想挨个安装看看到底是哪个包起了冲突,然而恰好在某个网页上看到conda安装yaml还有一个pyyaml的包,于是尝试:
- 在环境A里接着conda install pyyaml,conda list多了pyyaml,然而import yaml依然失败
索性建立一个干净的环境再试试吧
- 新建了一个空的conda虚拟环境B, conda install pyyaml,系统提示安装了pyyaml和yaml两个包,import yaml成功
- conda install pytorch torchvision cuda80,import yaml成功
- conda install opencv, import yaml成功
- pip install tensorboard,import yaml成功
哇啦
至少在效果上已经成功解决了这个问题,但是问题的解决几乎是靠着运气和误打误撞解决的,我及不知道为什么会出这个问题,也不知道为什么这样做就把问题解决了╮(╯_╰)╭
于是想到了西乔的经典漫画(来自 西乔的九卦 " 运行结果--Programmers(53) ):
如果有大神知道这其中原因,请不吝赐教~