conda create 报错:Unable to read repodata JSON(镜像 pkgs/free 导致)
使用conda创建python3.8时遇到报错:
命令代码:
conda create -n dd2l38 python=3.8 pip -y
报错:
# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<< Traceback (most recent call last): File "/home/user/anaconda3/lib/python3.12/site-packages/conda/exception_handler.py", line 18, in __call__ return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda/cli/main.py", line 61, in main_subshell exit_code = do_call(args, parser) ^^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda/cli/conda_argparse.py", line 205, in do_call result = getattr(module, func_name)(args, parser) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda/notices/core.py", line 132, in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda/cli/main_create.py", line 154, in execute return install(args, parser, "create") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda/cli/install.py", line 417, in install unlink_link_transaction = solver.solve_for_transaction( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda/core/solve.py", line 152, in solve_for_transaction unlink_precs, link_precs = self.solve_for_diff( ^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda/core/solve.py", line 221, in solve_for_diff final_precs = self.solve_final_state( ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda_libmamba_solver/solver.py", line 231, in solve_final_state index = IndexHelper( ^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda_libmamba_solver/index.py", line 136, in __init__ self._index = self._load_channels() ^^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda_libmamba_solver/index.py", line 340, in _load_channels info = self._json_path_to_repo_info(url, jsons[url]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/anaconda3/lib/python3.12/site-packages/conda_libmamba_solver/index.py", line 295, in _json_path_to_repo_info repo = api.Repo(self._pool, noauth_url, str(path_to_use), escape_channel_url(noauth_url)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: Unable to read repodata JSON file 'http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/noarch', error was: repository does not start with an object $ /home/user/anaconda3/bin/conda create -n dd2l38 python=3.8 pip -y
environment variables: CIO_TEST=<not set> CONDA_ALLOW_SOFTLINKS=false CONDA_DEFAULT_ENV=base CONDA_EXE=/home/user/anaconda3/bin/conda CONDA_PREFIX=/home/user/anaconda3 CONDA_PROMPT_MODIFIER=(base) CONDA_PYTHON_EXE=/home/user/anaconda3/bin/python CONDA_ROOT=/home/user/anaconda3 CONDA_SHLVL=1 CURL_CA_BUNDLE=<not set> LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64 LD_PRELOAD=<not set> PATH=/home/user/.local/bin:/home/user/anaconda3/bin:/home/user/anaconda3/co ndabin:/usr/local/cuda- 12.4/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: /usr/games:/usr/local/games:/snap/bin:/home/user/.lmstudio/bin:/home/u ser/.lmstudio/bin REQUESTS_CA_BUNDLE=<not set> SSL_CERT_FILE=<not set> active environment : base active env location : /home/user/anaconda3 shell level : 1 user config file : /home/user/.condarc populated config files : /home/user/anaconda3/.condarc /home/user/.condarc conda version : 24.9.2 conda-build version : 24.9.0 python version : 3.12.7.final.0 solver : libmamba (default) virtual packages : __archspec=1=sapphirerapids __conda=24.9.2=0 __cuda=12.4=0 __glibc=2.35=0 __linux=6.8.0=0 __unix=0=0 base environment : /home/user/anaconda3 (writable) conda av data dir : /home/user/anaconda3/etc/conda conda av metadata url : None channel URLs : http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/linux-64 http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/linux-64 http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/noarch http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/linux-64 http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/noarch http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/linux-64 http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64 http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/noarch http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64 http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/noarch http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64 http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/noarch https://repo.anaconda.com/pkgs/main/linux-64 https://repo.anaconda.com/pkgs/main/noarch https://repo.anaconda.com/pkgs/r/linux-64 https://repo.anaconda.com/pkgs/r/noarch package cache : /home/user/anaconda3/pkgs /home/user/.conda/pkgs envs directories : /home/user/anaconda3/envs /home/user/.conda/envs platform : linux-64 user-agent : conda/24.9.2 requests/2.32.3 CPython/3.12.7 Linux/6.8.0-65-generic ubuntu/22.04.5 glibc/2.35 solver/libmamba conda-libmamba-solver/24.9.0 libmambapy/1.5.8 aau/0.4.4 c/. s/. e/. UID:GID : 1000:1000 netrc file : /home/user/.netrc offline mode : False An unexpected error has occurred. Conda has prepared the above report. If you suspect this error is being caused by a malfunctioning plugin, consider using the --no-plugins option to turn off plugins. Example: conda --no-plugins install <package> Alternatively, you can set the CONDA_NO_PLUGINS environment variable on the command line to run the command without plugins enabled. Example: CONDA_NO_PLUGINS=true conda install <package> Upload did not complete. 4
关键报错在于上面这一大段里的这一句:RuntimeError: Unable to read repodata JSON file 'http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/noarch', error was: repository does not start with an object(在上一段中已加粗表示)
通过查找资料,这句报错表示“conda 在下载索引 (repodata.json),但从这个URL中拿到的内容不是一个合法的JOSN,触发点是机器上 全局/用户 .condarc
里配置的镜像通道,其中 anaconda/pkgs/free
已经属于淘汰频道;再加上 HTTP 与镜像的兼容问题,libmamba
解析失败,于是环境求解被直接中断。”
解决方法:
既然Conda创建环境失败是因为libmamba解析清华镜像anaconda/pkgs/free时JSON无效。所以只要把过期的通道和http源清掉,用官方的源就可以了。因为我用的是实验室的环境,担心影响到别人的环境,所以我没有.condarc移除pkgs/free。
最后使用了以下代码以完成配置,直接执行就可以了,但是creat -n后面的dd2l38需要换成你自己环境的名字:
CONDA_NO_PLUGINS=true CONDA_SOLVER=classic \
conda create -n dd2l38 python=3.8 pip -y \-c conda-forge -c defaults --override-channels
这段代码的意思是:
CONDA_NO_PLUGINS=true:关闭所有conda插件、保证运行时不会因为其他插件受影响,并且作用范围是仅这条命令生效,不会被永久写入配置。
CONDA_SOLVER=classic:conda有两种依赖求解器:
libmamba(默认,快但有时挑剔);
classic(老版本,慢但兼容性好);
设置成classic可以避开libmamba解析某些镜像报错的问题。
主命令是:conda create -n dd2l38 python=3.8 pip -y 新建一个dd2l38环境,并安装Python 3.8和pip ,-y用于自动确认
-c conda-forge -c defaults --override-channels:是进行通道控制,把 conda-forge
作为 第一个优先的 channel,conda 会先从这里找包。如果第一个没找到就去defaults里找。--override-channels表示只用上面显示指定的channel,忽略任何配置文件里已有的channel。
注:defaults是Anaconda公司官方维护的默认库,没加任何-c参数时,conda从这里找包。conda-forge时一个开源的社区驱动仓库,软件包更新比较快,包含一些defauls里没有的包。