服务器上想用pip3安装个pandas跑程序。结果一直报错:
Traceback (most recent call last):
File "/usr/bin/pip3", line 8, in <module>
from pip import main
File "/usr/lib/python3.6/site-packages/pip/__init__.py", line 42, in <module>
from pip.utils import get_installed_distributions, get_prog
File "/usr/lib/python3.6/site-packages/pip/utils/__init__.py", line 27, in <module>
from pip._vendor import pkg_resources
File "/usr/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 35, in <module>
import plistlib
File "/usr/lib64/python3.6/plistlib.py", line 65, in <module>
from xml.parsers.expat import ParserCreate
File "/usr/lib64/python3.6/xml/parsers/expat.py", line 4, in <module>
from pyexpat import *
ImportError: /usr/lib64/python3.6/lib-dynload/pyexpat.cpython-36m-x86_64-linux-gnu.so: undefined symbol: XML_SetHashSalt
参考文章:https://stackoverflow.com/questions/63414448/pip3-throws-undefined-symbol-xml-sethashsalt
解决方案:在命令行里敲 LD_LIBRARY_PATH=/lib64/:$PATH 。pip3可以正常启动。
-----------------------------------------分割线------------------------------------------
在后续的使用中,发现每次xshell连上服务器后,依旧会报上面的错,重新输入上述指令后,才可以正常使用。
其原因见这里:https://www.cnblogs.com/trying/archive/2013/06/07/3123577.html
LD_LIBRARY_PATH变量是临时设置的,因此每次断开sh连接后,设定失效,需要重新设定。
这里选用的方法是:
- 打开~/.bashrc文件
- 写入
LD_LIBRARY_PATH=/lib64/:$PATH
这里没有使用文章中提到的export,我对export的必要性不明了。便写入了前文中的指令。
不过不写export好像没有效果,我后面找时间测一测
总结一下,服务器上报undefined symbol: XML_SetHashSalt错时,很大可能是因为LD_LIBRARY_PATH变量不包含扩展包的路径。因此需要设定该变量。又每次断开重连服务器时,该变量还原,因此需要反复设定该变量。而~/.bashrc文件中写入的指令在每次启动sh时都会自动执行,因此将设定环境变量的指令写入此文件中,后面再连服务器跑脚本时,就没再报过该错误。