问题描述:
在导入torch的某些模块时报错如下:
Traceback (most recent call last):
File "train_net.py", line 29, in <module>
from torch.utils.tensorboard import SummaryWriter
File "/home/user/.conda/envs/xxx/lib/python3.10/site-packages/torch/utils/tensorboard/__init__.py", line 12, in <module>
from .writer import FileWriter, SummaryWriter # noqa: F401
File "/home/user/.conda/envs/xxx/lib/python3.10/site-packages/torch/utils/tensorboard/writer.py", line 10, in <module>
from tensorboard.compat.proto import event_pb2
File "/home/user/.conda/envs/xxx/lib/python3.10/site-packages/tensorboard/compat/proto/event_pb2.py", line 6, in <module>
from google.protobuf import descriptor as _descriptor
File "/home/user/.conda/envs/xxx/lib/python3.10/site-packages/google/protobuf/descriptor.py", line 47, in <module>
from google.protobuf.pyext import _message
ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/user/.conda/envs/xxx/lib/python3.10/site-packages/google/protobuf/pyext/_message.cpython-310-x86_64-linux-gnu.so)
原因分析:
提示错误gcc 版本中的so文件与anaconda 中的包冲突1,一些依赖包的版本可能出了问题,导致不匹配2。
解决方案:
第一次尝试(碰巧)
很多网上的方法都是手动配置链接3,但是并没有真正的解决问题,也没有必要。需要根据报错提示中涉及到的包具体问题具体分析。
譬如在笔者遇到的问题中,涉及到的包是 tensorboard
和 google
,笔者在安装 tensorboard
和 tensorboardX
时采用的安装命令是 conda install tensorboard tensorboardX
,可能存在着pip和conda安装的包有冲突,于是笔者采用:
pip uninstall tensorboard tensorboardX
pip install tensorboard tensorboardX
成功结果问题,不再报错。(注:用 conda uninstall
可能会卸载更多的相关包)
某些网友出现了“gcc 版本中的so文件与anaconda 中scipy冲突”、 pandas 冲突等2,也均是通过重新安装相应的包解决问题。
第二次尝试
再次遭遇前述问题,使用前面的方法,发现前面的方法不奏效。还是根据哪个包冲突就分析重装哪个包的原则进行尝试。这里涉及到的是 protobuf
, 在 pip uninstall protobuf
时发现,部分位置需要手动删除,尤其是冲突的 protobuf/pyext/_message.cpython-310-x86_64-linux-gnu.so
位置。
Found existing installation: protobuf 5.27.1
Uninstalling protobuf-5.27.1:
Would remove:
/home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/google/_upb/_message.abi3.so
/home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/google/protobuf/*
/home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/protobuf-5.27.1.dist-info/*
Would not remove (might be manually added):
/home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/google/protobuf/internal/_api_implementation.cpython-310-x86_64-linux-gnu.so
/home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/google/protobuf/pyext/_message.cpython-310-x86_64-linux-gnu.so
/home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/google/protobuf/util/json_format_pb2.py
/home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/google/protobuf/util/json_format_proto3_pb2.py
Proceed (Y/n)? y
Successfully uninstalled protobuf-5.27.1
手动将 google/protobuf
下全部删除,再重新安装 pip install protobuf==4.25.3
,问题得到解决。
其他情况
遇到报错
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/kiwisolver/_cext.cpython-310-x86_64-linux-gnu.so)
用 pip 重装 kiwisolver
问题解决。
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/scipy/spatial/_ckdtree.cpython-310-x86_64-linux-gnu.so)
用 pip 重装 scipy
问题解决。
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /home/xxx/.conda/envs/xxx/lib/python3.10/site-packages/sklearn/metrics/_pairwise_distances_reduction/_base.cpython-310-x86_64-linux-gnu.so)
用 pip 重装 scikit-learn
问题解决。