问题: 在Ubantu系统中使用conda环境运行jupyter, 各种包都可正常导入使用,但当在terminal中使用同一个conda环境的python、运行同样内容的py文件,却总是出现上述报错。由于没有管理员权限,不方便对系统主要目录作下载、更新等操作。
更新:在bash文件中批量运行python脚本文件时,直接指定环境的python路径即可解决上述问题,如
python_path='/home/.conda/envs/$ENV/bin/python'
nohup ${python_path} script.py > sh.txt 2>&1
原回答:
解决:jupyter中使用conda环境,它自动帮助我们配置好了各种C++依赖库的下载、链接,但在terminal中使用python运行py文件,会默认去/usr/lib等目录下找C++依赖库,找不到指定版本则会报错,然而原则上如果jupyter能够正常运行,这样的依赖库是存在于系统中的,于是可先用以下命令找所需的文件的位置:
locate libstdc++.so.6
这会列出许多在conda环境中的位置、usr等目录的位置,关注我们自己的conda环境中的该文件位置,如我的系统中有如下文件
/home/$USER/.conda/envs/$ENV/lib/libstdc++.so.6.0.32
使用如下命令,可确认该文件是否包含所需的GLIBCXX版本
strings /home/$USER/.conda/envs/$ENV/lib/libstdc++.so.6.0.32 | grep GLIBCXX_3.4.
找到包含报错所需的GLIBCXX版本的libstdc++文件后,将这个文件的目录记下,在terminal中使用conda环境中的python运行py文件前,先将其上一级目录添加到LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/$USER/.conda/envs/$ENV/lib
当然也可以把这个命令写进bash脚本、写进.bashrc等,效果应该都是一样的。