创建/更新mamba环境时遇UTF-8解码错误,无权限重装求解决
解决Mamba创建/更新环境时的UTF-8解码错误
问题情况
使用mamba创建或更新环境时触发UTF-8解码错误,报错指向缓存相关操作。尝试执行mamba clean --all清理缓存时,同样触发该错误。无机器权限重装mamba,GitHub上相关conda问题未得到有效解答,以下是报错堆栈及mamba info输出,寻求可行解决办法。
报错堆栈
# >>>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<< Traceback (most recent call last): File "/path/to/mamba/lib/python3.10/site-packages/conda/exceptions.py", line 1124, in __call__ return func(*args, **kwargs) File "/path/to/mamba/lib/python3.10/site-packages/conda_env/cli/main.py", line 78, in do_call exit_code = getattr(module, func_name)(args, parser) File "/path/to/mamba/lib/python3.10/site-packages/conda/notices/core.py", line 109, in wrapper return func(*args, **kwargs) File "/path/to/mamba/lib/python3.10/site-packages/conda_env/cli/main_create.py", line 154, in execute result[installer_type] = installer.install(prefix, pkg_specs, args, env) File "/path/to/mamba/lib/python3.10/site-packages/mamba/mamba_env.py", line 173, in mamba_install handle_txn(conda_transaction, prefix, args, True) File "/path/to/mamba/lib/python3.10/site-packages/mamba/linking.py", line 38, in handle_txn unlink_link_transaction.download_and_extract() File "/path/to/mamba/lib/python3.10/site-packages/conda/core/link.py", line 205, in download_and_extract self._pfe.execute() File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 707, in execute self.prepare() File "/path/to/mamba/lib/python3.10/site-packages/conda/common/io.py", line 84, in decorated return f(*args, **kwds) File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 686, in prepare self.paired_actions.update( File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 687, in <genexpr> (prec, self.make_actions_for_record(prec)) for prec in self.link_precs File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 554, in make_actions_for_record extracted_pcrec = next( File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 555, in <genexpr> ( File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 558, in <genexpr> PackageCacheData(pkgs_dir).query(pref_or_spec) File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 82, in __call__ package_cache_instance = super().__call__(pkgs_dir) File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 95, in __init__ self._urls_data = UrlsData(pkgs_dir) File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 489, in __init__ self._urls_data = [line.strip().decode("utf-8") for line in fh] File "/path/to/mamba/lib/python3.10/site-packages/conda/core/package_cache_data.py", line 489, in <listcomp> self._urls_data = [line.strip().decode("utf-8") for line in fh] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 1: invalid start byte `$ /path/to/mamba/bin/mamba create -n <NAME> -f <FILE>`
mamba info输出
active environment : base active env location : <PRIVATE>/mamba shell level : 3 user config file : <PRIVATE>/.condarc populated config files : <PRIVATE>/.condarc conda version : 23.1.0 conda-build version : not installed python version : 3.10.9.final.0 virtual packages : __archspec=1=x86_64 __glibc=2.17=0 __linux=3.10.0=0 __unix=0=0 base environment : <PRIVATE>/mamba (read only) conda av data dir : <PRIVATE>/mamba/etc/conda conda av metadata url : None channel URLs : <PRIVATE> <PRIVATE> <PRIVATE> <PRIVATE> <PRIVATE> <PRIVATE> <PRIVATE> <PRIVATE> <PRIVATE> <PRIVATE> package cache : <PRIVATE>/.conda/pkgs <PRIVATE>/miniconda3/pkgs envs directories : <PRIVATE>/.conda/envs <PRIVATE>/conda_envs platform : linux-64 user-agent : conda/23.1.0 requests/2.28.2 CPython/3.10.9 Linux/3.10.0-1160.95.1.el7.x86_64 rhel/7.9 glibc/2.17 UID:GID : 688555:688555 netrc file : <PRIVATE>/.netrc offline mode : False
可行解决办法
- 手动删除缓存中的
.urls文件:从报错可知是缓存目录下的URL记录文件编码异常。找到mamba info中列出的两个package cache目录(<PRIVATE>/.conda/pkgs和<PRIVATE>/miniconda3/pkgs),进入每个目录删除所有.urls后缀的文件,这些文件是下载URL的缓存,删除后mamba会自动重新生成。 - 强制UTF-8编码环境变量:执行mamba命令前设置环境变量,强制Python用UTF-8处理编码,示例命令:
或者:PYTHONUTF8=1 mamba create -n <NAME> -f <FILE>LC_ALL=en_US.UTF-8 mamba create -n <NAME> -f <FILE> - 指定新的缓存目录:创建一个全新的缓存目录,执行命令时绕过原有异常缓存,示例:
mkdir -p ~/new_conda_cache mamba create -n <NAME> -f <FILE> --pkgs-dir ~/new_conda_cache - 检查
.condarc配置:查看用户配置文件<PRIVATE>/.condarc,确认是否存在异常的缓存路径配置或非UTF-8编码相关设置,如有则调整对应项。
内容的提问来源于stack exchange,提问作者leqo
相关产品推荐
相关产品推荐

