网状结构看不到conda环境中的系统库

问题描述

我正在尝试使用RStudio Server v1.2.5042和使用reticulate创建的自定义环境,在CentOS 7.8系统上使用R软件包conda。当我使用reticulate启动Python作业时,出现错误提示某些系统库不是正确的版本,特别是libstdc++.so.6libz.so.1

首先,我意识到CentOS 7.8有点旧,并且某些问题可以通过升级OS来解决,但是在这种情况下,这不是一个选择。

conda环境可以正常工作,我可以在终端窗口中运行目标Python脚本,而不会出现任何错误。在使用reticulate的RStudio中,此刻的代码非常简单:

   library(reticulate)
   use_condaenv('test')
   py_run_file('test_script.py')

运行脚本时,出现以下错误

ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/<user>/.conda/envs/test/lib/python3.8/site-packages/scipy/_lib/_uarray/_uarray.cpython-38-x86_64-linux-gnu.so)

当我查看/usr/lib64目录时,会发现libstdc++.so,但是运行strings libstdc++.so | grep ^GLIBC | sort则表明它确实不支持版本GLIBCXX 3.4.21。没什么好奇怪的如果导航到/home/<user>/.conda/envs/test/lib目录,则会找到libstdc++.so.6的另一个副本,并且该副本确实支持版本GLIBCXX 3.4.21。因此,正确的conda环境目录中存在该库的正确版本,但是由于某些原因RStudioreticulate找不到它。

我尝试将LD_LIBRARY_PATH更改为首先列出conda环境目录,但这不起作用。我发现了一段漫长的讨论here,指出LD_LIBRARY_PATH并不是一个好的解决方法,除非它是在RStudio进程初始化之前设置的。 (然后就使用哪个版本的Python进行了切线。)就我的情况而言,可能有多个conda环境要支持,并且不可能知道在任何给定的会话中哪个将处于活动状态,并且任何给定的用户我都会使用不同/多个环境。我宁愿不要尝试将所有conda环境协调成一个大型超级环境。

我还验证了Python版本和其他库的正确设置:

python:         /home/<user>/.conda/envs/test/bin/python
libpython:      /home/<user>/.conda/envs/test/lib/libpython3.8.so
pythonhome:     /home/<user>/.conda/envs/test:/home/<user>/.conda/envs/test
version:        3.8.5 (default,Aug  5 2020,08:36:46)  [GCC 7.3.0]
numpy:          /home/<user>/.conda/envs/test/lib/python3.8/site-packages/numpy
numpy_version:  1.19.1

NOTE: Python version was forced by use_python function

通过重置/usr/lib64中的链接使其指向conda目录中的副本,我可以使其运行。尽管这可以使其在该实例中正常工作,但我不确定我是否想将这样的修复程序推向生产环境。我的猜测是,如果我在所有conda环境中链接到该库中包含性最强的版本,并且该版本完全支持系统级库支持的所有版本,那么一切都会很好,但这听起来像是黑客,充其量。

如果有人找到了一个好的解决方案,我希望知道详细信息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...