一、问题的起因
我原来的环境是tensorflow1.5,后来升级到tensorflow2.1,却发现原来写的一些代码不能在tensorflow 2.0以上运行,要改代码的话确实涉及到一些底层的API,对我来说难度不小,于是想再创建一个环境tensorflow1.5,让这些老代码就在1.5版本的tensorflow下运行。于是进入到anaconda prompt命令行进行操作:conda create -n tensorflow1.5,于是就报出如下错误了:
Traceback (most recent call last):
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\subdir_data.py", line 227, in _load
mod_etag_headers.get('_mod'))
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\subdir_data.py", line 574, in fetch_repodata_remote_request
raise Response304ContentUnchanged()
conda.core.subdir_data.Response304ContentUnchanged
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\DEV\Anaconda3\lib\site-packages\conda\exceptions.py", line 819, in __call__
return func(*args, **kwargs)
File "C:\DEV\Anaconda3\lib\site-packages\conda\cli\main.py", line 78, in _main
exit_code = do_call(args, p)
File "C:\DEV\Anaconda3\lib\site-packages\conda\cli\conda_argparse.py", line 77, in do_call
exit_code = getattr(module, func_name)(args, parser)
File "C:\DEV\Anaconda3\lib\site-packages\conda\cli\main_create.py", line 11, in execute
install(args, parser, 'create')
File "C:\DEV\Anaconda3\lib\site-packages\conda\cli\install.py", line 235, in install
force_reinstall=context.force,
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\solve.py", line 518, in solve_for_transaction
force_remove, force_reinstall)
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\solve.py", line 451, in solve_for_diff
final_precs = self.solve_final_state(deps_modifier, prune, ignore_pinned, force_remove)
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\solve.py", line 180, in solve_final_state
index, r = self._prepare(prepared_specs)
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\solve.py", line 592, in _prepare
self.subdirs, prepared_specs)
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\index.py", line 215, in get_reduced_index
new_records = query_all(spec)
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\index.py", line 184, in query_all
return tuple(concat(future.result() for future in as_completed(futures)))
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\subdir_data.py", line 95, in query
self.load()
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\subdir_data.py", line 149, in load
_internal_state = self._load()
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\subdir_data.py", line 233, in _load
mod_etag_headers.get('_mod'))
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\subdir_data.py", line 280, in _read_local_repdata
_internal_state = self._process_raw_repodata_str(raw_repodata_str)
File "C:\DEV\Anaconda3\lib\site-packages\conda\core\subdir_data.py", line 317, in _process_raw_repodata_str
json_obj = json.loads(raw_repodata_str or '{}')
File "C:\DEV\Anaconda3\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\DEV\Anaconda3\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\DEV\Anaconda3\lib\json\decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 169024 column 26 (char 4767569)
于是我就开始苦逼的在网上搜索(吐槽一下百度,搜索不到合适的结果,还是在google上搜索了大量的同样问题),我发现很多人遇到了类似的或相同的问题,可是却没有解决的好方法,直到我读到https://github.com/conda/conda/issues/8051,感谢EricThomson。
二、解决方法
1. 先查看channels
conda config --get channels
我的电脑上运行结果是:
--add channels 'defaults' # lowest priority
--add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge'
--add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2'
--add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/'
--add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r'
--add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free'
--add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main' # highest priority
2. 移除conda-forge
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
问题圆满解决,我开始愉快地创建新的环境了。
三、题外话
我很奇怪为啥我前一个月用conda成功创建了环境,过了一个月就不能创建环境了呢?我想了想,也许是我在升级安装tensorflow2.1时使用了清华的镜像源,所以我的channels就默认到清华的镜像了,而正好镜像上的conda-forge引起我的错误。这些都是猜测,没有得到验证,有知道的朋友请不吝赐教。