2026-03-17 Conda 环境下 R 源码包编译安装失败的通用解决方案

Conda 环境下 R 源码包编译安装失败的通用解决方案

典型报错

在 R session 内使用 install.packages() 安装源码包时,报错类似:

x86_64-conda-linux-gnu-cc: command not found
Configuration failed because libXXX was not found.

常见于 curlopensslxml2sfigraph 等需要系统库的 R 包。

原因

install.packages() 在 R 内部启动子进程进行编译。即使你已经 conda activate 了环境,R session(尤其通过 RStudio 或 IDE 启动的)不一定继承 conda 的环境变量(PATHPKG_CONFIG_PATHLD_LIBRARY_PATH 等),导致:

  1. 找不到 conda 安装的 C/C++ 编译器(x86_64-conda-linux-gnu-cc
  2. 找不到 conda 安装的系统库头文件(libcurllibssl 等)

解决方案

方法 1:在 conda shell 中用 R CMD INSTALL(推荐)

确保在终端中先激活 conda 环境,再用命令行安装:

conda activate r442

# 安装到指定 library 路径
R CMD INSTALL --library=/path/to/your/R/library /path/to/package.tar.gz

# 示例
R CMD INSTALL --library=/s1/SHARE/01_software/R_432_SeuratV5/library \
  /s1/SHARE/01_software/R_432_SeuratV5/library/curl_7.0.0.tar.gz

R CMD INSTALL 直接在 shell 中执行,完整继承 conda 环境变量,编译器和系统库都能正确找到。

方法 2:用 conda 安装二进制版 R 包(免编译)

conda activate r442
conda install -c conda-forge r-curl r-openssl r-xml2  # 按需替换包名

conda 的 R 包以 r- 为前缀,安装的是预编译二进制版本,不需要本地编译。包会装在 conda 的 R library 路径下(如 /s1/mengzijun/anaconda3/envs/r442/lib/R/library),只要 .libPaths() 包含该路径即可使用。

方法 3:在 R session 内手动设置环境变量

如果必须用 install.packages(),可以在 R 里先设置环境变量:

# 将 conda 环境的 bin 和 lib 加入 PATH
conda_prefix <- "/s1/mengzijun/anaconda3/envs/r442"
Sys.setenv(
  PATH = paste(file.path(conda_prefix, "bin"), Sys.getenv("PATH"), sep = ":"),
  PKG_CONFIG_PATH = paste(file.path(conda_prefix, "lib/pkgconfig"), Sys.getenv("PKG_CONFIG_PATH"), sep = ":"),
  LD_LIBRARY_PATH = paste(file.path(conda_prefix, "lib"), Sys.getenv("LD_LIBRARY_PATH"), sep = ":")
)

# 然后再安装
install.packages("/path/to/package.tar.gz", repos = NULL, type = "source")

前置依赖:确保 conda 环境有编译工具链

无论用哪种方法,conda 环境里需要有编译器和对应的系统库:

conda activate r442

# 编译工具链
conda install -c conda-forge c-compiler cxx-compiler pkg-config

# 常见 R 包需要的系统库(按需安装)
conda install -c conda-forge libcurl openssl libxml2 glpk

运行时依赖:LD_LIBRARY_PATH

编译安装成功后,运行时如果报 cannot open shared object file(如 libglpk.so.40),需要确保 LD_LIBRARY_PATH 包含 conda 的 lib 目录:

# 方式 1:激活 conda 环境后运行(自动设置)
conda activate r442
Rscript your_script.R

# 方式 2:在 shell 脚本开头手动 export
export LD_LIBRARY_PATH=/s1/mengzijun/anaconda3/envs/r442/lib:$LD_LIBRARY_PATH

常见包与系统库对照表

R 包 需要的系统库 conda 安装命令
curl libcurl conda install -c conda-forge libcurl
openssl openssl conda install -c conda-forge openssl
xml2 libxml2 conda install -c conda-forge libxml2
sf gdal, geos, proj conda install -c conda-forge gdal geos proj
igraph glpk conda install -c conda-forge glpk
textshaping harfbuzz, fribidi conda install -c conda-forge harfbuzz fribidi
ragg freetype, libpng, libtiff conda install -c conda-forge freetype libpng libtiff

总结

优先级:方法 1 (R CMD INSTALL) > 方法 2 (conda 二进制) > 方法 3 (R 内设环境变量)

核心原则:编译源码包时,确保编译器和系统库对 R 的子进程可见。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容