设置LD_LIBRARY_PATH后终端命令失效,及PIL导入错误求助
问题解决思路:Python导入PIL时的CXXABI版本错误及LD_LIBRARY_PATH冲突问题
问题背景
运行Python脚本时触发以下导入错误:
File "/home/<username>/miniconda3/<gitrepo>/eval.py", line 13, in <module> from dataset import dtu_jiayu File "/home/<username>/miniconda3/<gitrepo>/dtu_jiayu.py", line 10, in <module> from dataset.utils import * File "/home/<username>/miniconda3/<gitrepo>/utils.py", line 13, in <module> from PIL import Image File "/home/<username>/miniconda3/lib/python3.9/site-packages/PIL/Image.py", line 100, in <module> from . import _imaging as core ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found
尝试执行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/<username>/miniconda3/lib/解决问题后,终端基础命令(如ls)无法运行,报错:
ls: relocation error: /lib64/libacl.so.1: symbol getxattr, version ATTR_1.0 not defined in file libattr.so.1 with link time reference
环境说明:大学集群服务器,使用miniconda基础环境。
可行解决思路
临时为Python进程指定LD_LIBRARY_PATH:
避免全局修改环境变量污染终端,直接在运行Python脚本时临时设置路径:LD_LIBRARY_PATH=/home/<username>/miniconda3/lib:$LD_LIBRARY_PATH python /home/<username>/miniconda3/<gitrepo>/eval.py此操作仅对当前Python进程生效,不影响其他终端命令。
使用LD_PRELOAD优先加载conda的libstdc++:
先确认conda环境的libstdc++.so.6包含所需版本:strings /home/<username>/miniconda3/lib/libstdc++.so.6 | grep CXXABI确认存在
CXXABI_1.3.9后,临时让后续进程优先加载该库:export LD_PRELOAD=/home/<username>/miniconda3/lib/libstdc++.so.6退出当前终端后环境自动恢复,不会破坏系统全局配置。
创建独立conda虚拟环境:
隔离项目依赖与基础环境,避免版本冲突:conda create -n project_env python=3.9 conda activate project_env # 安装依赖,以pillow为例 conda install pillow # 或 pip install pillow虚拟环境的依赖独立于系统和基础conda环境,能有效规避库版本不兼容问题。
联系集群管理员升级系统libstdc++:
集群系统库由管理员统一维护,若多个用户遇到同类问题,可申请管理员升级系统的libstdc++.so.6,从根源解决版本缺失问题。
内容的提问来源于stack exchange,提问作者Damian Kopp
相关产品推荐
相关产品推荐

