想试试TensorFlow来着,结果在安装的时候就悲剧了。先安装Python 2.7.10版本。然后试试pip -v 发现报错:
ValueError: invalid truth value 'true #\xe5\x8f\x96\xe6\xb6\x88pip\xe7\x89\x88\xe6
\x9c\xac\xe6\xa3\x80\xe6\x9f\xa5\xef\xbc\x8c\xe6\x8e\x92\xe9\x99\xa4\xe6\xaf\x8f
\xe6\xac\xa1\xe9\x83\xbd\xe6\x8a\xa5\xe6\x9c\x80\xe6\x96\xb0\xe7\x9a\x84pip'
求助万能的Google,发现有人提到 pip.conf文件
然后Google后面那一长串的 \xe5之类的,我知道这个是因为uft8编码展示中文的问题,发现居然有人遇到了和我一摸一样的问题
https://ask.csdn.net/questions/676496
可惜我对这个问题的回答十分不满意。因为答案是让你升版本,把Python升级到3,但是TensorFlow官方明明写的很清楚,支持2.6,所以我认为不是升级版本就万事大吉的问题,我要找到原因。
所以我打开/util.py 查看报错的代码行(代码地址:https://svn.python.org/projects/python/trunk/Lib/distutils/util.py)
def strtobool (val): """Convert a string representation of truth to true (1) or false (0). True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if 'val' is anything else. """ val = string.lower(val) if val in ('y', 'yes', 't', 'true', 'on', '1'): return 1 elif val in ('n', 'no', 'f', 'false', 'off', '0'): return 0 else: raise ValueError, "invalid truth value %r" % (val,)
写的再清楚不多,是val不符合格式
再查看报错,'true #\xe5\x8f\x96\xe6\xb6\x88pip\xe7\x89\x88\xe6\x9c\xac\xe6\xa3\x80\xe6\x9f\xa5\xef\xbc\x8c\xe6\x8e\x92\xe9\x99\xa4\xe6\xaf\x8f\xe6\xac\xa1\xe9\x83\xbd\xe6\x8a\xa5\xe6\x9c\x80\xe6\x96\xb0\xe7\x9a\x84pip'
果然是不符合格式,因为后面一大坨,再发现有#这肯定是注释了。那么这个val是啥呢? 联想到第一段内容,我打开pip.conf看看,他在 ~/.pip/pip.conf 。发现果然是注释和配置写在了一行,他把注释也读进来了当做配置,所以就报错了。。。
果断删除注释,再运行 pip -v 果然就好了。。。
感想: 不要人云亦云,一定要自己搞清楚问题, 另外查找问题也需要灵感。
另外注释的内容,使用豆瓣的源啥的,我也不知道从哪来的。