Ubuntu 22.04.1 LTS环境下安装R包时libcurl4-openssl-dev无法被识别的技术求助
我在Ubuntu 22.04.1 LTS系统中已经通过以下命令安装了系统级的libcurl4-openssl-dev:
sudo apt-get install libcurl4-openssl-dev
随后创建了一个Miniconda环境,并在其中安装了比base环境更旧的R版本(3.6.1),环境信息如下:
sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-conda_cos6-linux-gnu (64-bit)
Running under: Ubuntu 22.04.1 LTS
Matrix products: default
BLAS/LAPACK: /home/studenti/miniconda3/envs/biobakery-melonnpan/lib/libopenblasp-r0.3.12.so
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=en_GB.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.6.1
尝试批量安装R包时出现依赖缺失报错:
R -q -e "install.packages(c('devtools', 'glmnet', 'foreach', 'getopt', 'doParallel', 'vegan', 'data.table', 'ggplot2', 'AssocTests', 'optparse', 'tibble'), repos='http://cran.r-project.org')"
报错摘要:
ERROR: dependency ‘credentials’ is not available for package ‘gert’ removing ‘/home/studenti/miniconda3/envs/biobakery-melonnpan/lib/R/library/gert’ ERROR: dependency ‘httr’ is not available for package ‘gh’ removing ‘/home/studenti/miniconda3/envs/biobakery-melonnpan/lib/R/library/gh’ ERROR: dependencies ‘systemfonts’, ‘textshaping’ are not available for package ‘ragg’ removing ‘/home/studenti/miniconda3/envs/biobakery-melonnpan/lib/R/library/ragg’ ERROR: dependency ‘fExtremes’ is not available for package ‘AssocTests’ removing ‘/home/studenti/miniconda3/envs/biobakery-melonnpan/lib/R/library/AssocTests’ ERROR: dependencies ‘curl’, ‘gert’, ‘gh’ are not available for package ‘usethis’ removing ‘/home/studenti/miniconda3/envs/biobakery-melonnpan/lib/R/library/usethis’ ERROR: dependencies ‘httr’, ‘ragg’ are not available for package ‘pkgdown’ removing ‘/home/studenti/miniconda3/envs/biobakery-melonnpan/lib/R/library/pkgdown’ ERROR: dependencies ‘usethis’, ‘pkgdown’, ‘rcmdcheck’, ‘rversions’, ‘urlchecker’ are not available for package ‘devtools’ removing ‘/home/studenti/miniconda3/envs/biobakery-melonnpan/lib/R/library/devtools’
单独安装依赖包时遇到ANTICONF错误,提示找不到libcurl:
------------------------- ANTICONF ERROR --------------------------- Configuration failed because libcurl was not found. Try installing: * deb: libcurl4-openssl-dev (Debian, Ubuntu, etc) * rpm: libcurl-devel (Fedora, CentOS, RHEL) * csw: libcurl_dev (Solaris) If libcurl is already installed, check that 'pkg-config' is in your PATH and PKG_CONFIG_PATH contains a libcurl.pc file. If pkg-config is unavailable you can set INCLUDE_DIR and LIB_DIR manually via: R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...' --------------------------------------------------------------------
针对Miniconda环境隔离系统库导致的libcurl无法被R识别问题,你可以尝试以下几种方法:
方法1:在conda环境中安装libcurl
Miniconda环境默认会优先使用环境内的库,而非系统库。你可以直接在目标conda环境中安装libcurl包,这样R就能找到对应的依赖:
# 激活你的conda环境 conda activate biobakery-melonnpan # 安装conda版本的libcurl和pkg-config conda install -c conda-forge libcurl pkg-config
安装完成后,再尝试重新安装R包:
install.packages(c('curl', 'httr', 'devtools'), dependencies=TRUE)
方法2:手动指定libcurl的路径给R
如果不想用conda版本的libcurl,可以手动告诉R系统级libcurl的位置。首先找到系统中libcurl的头文件和库文件路径:
# 查找libcurl.pc的位置 find /usr -name "libcurl.pc" # 通常路径是/usr/lib/x86_64-linux-gnu/pkgconfig/libcurl.pc
提取对应的路径:
- INCLUDE_DIR:通常为
/usr/include/x86_64-linux-gnu - LIB_DIR:通常为
/usr/lib/x86_64-linux-gnu
接下来,用install.packages指定配置变量安装curl包(这是最基础的依赖):
install.packages('curl', configure.vars = c(INCLUDE_DIR = '/usr/include/x86_64-linux-gnu', LIB_DIR = '/usr/lib/x86_64-linux-gnu'))
安装好curl后,再依次安装httr、gert、gh等依赖,最后安装devtools和其他目标包。
方法3:设置环境变量让R识别系统库
在激活conda环境后,设置PKG_CONFIG_PATH环境变量,让pkg-config能找到系统的libcurl.pc文件:
conda activate biobakery-melonnpan export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
然后启动R,尝试安装包:
install.packages('curl', dependencies=TRUE)
如果希望每次激活环境都自动设置这个变量,可以把export命令添加到conda环境的activate.d脚本中:
mkdir -p $CONDA_PREFIX/etc/conda/activate.d echo 'export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
方法4:针对旧版R的兼容性调整
你的R版本是3.6.1,属于较旧的版本,部分新的R包可能不再支持该版本。对于报错中提到的fExtremes(AssocTests的依赖),你可能需要安装与R 3.6.1兼容的旧版本:
# 先确保devtools能安装成功 install.packages('devtools') library(devtools) # 安装兼容R 3.6.x的fExtremes版本 install_version('fExtremes', version='3042.82')
安装完fExtremes后,再尝试安装AssocTests。
内容的提问来源于stack exchange,提问作者Andrea Gatti

