Linux/Mac 系统 R 包安装失败怎么办?

R 语言好用的地方之一在于有很多包帮我们把复杂问题都实现了,使用时只需要一个函数就可以完成大量计算工作。但也存在一个问题,包的依赖很多,依赖很多其它包,依赖很多底层工具。因此在 Linux/Mac 等系统安装时常常会出现少了一些头文件(*.h) 或库文件而报错(*.so),  如下面的报错;

> install.packages("ragg")
将程序包安装入‘/home/ysx/R/x86_64-pc-linux-gnu-library/4.2’
(因为‘lib’没有被指定)
还安装相依关系‘textshaping’

试开URL’https://cloud.r-project.org/src/contrib/textshaping_0.3.6.tar.gz'
Content type 'application/x-gzip' length 35722 bytes (34 KB)
==================================================
downloaded 34 KB

试开URL’https://cloud.r-project.org/src/contrib/ragg_1.2.2.tar.gz'
Content type 'application/x-gzip' length 424677 bytes (414 KB)
==================================================
downloaded 414 KB

* installing *source* package ‘textshaping’ ...
** 成功将‘textshaping’程序包解包并MD5和检查
** using staged installation
Package harfbuzz was not found in the pkg-config search path.
Perhaps you should add the directory containing `harfbuzz.pc'
to the PKG_CONFIG_PATH environment variable
No package 'harfbuzz' found
Package fribidi was not found in the pkg-config search path.
Perhaps you should add the directory containing `fribidi.pc'
to the PKG_CONFIG_PATH environment variable
No package 'fribidi' found
Using PKG_CFLAGS=
Using PKG_LIBS=-lfreetype -lharfbuzz -lfribidi -lpng
--------------------------- [ANTICONF] --------------------------------
Configuration failed to find the harfbuzz freetype2 fribidi library. Try installing:
 * deb: libharfbuzz-dev libfribidi-dev (Debian, Ubuntu, etc)
 * rpm: harfbuzz-devel fribidi-devel (Fedora, EPEL)
 * csw: libharfbuzz_dev libfribidi_dev (Solaris)
 * brew: harfbuzz fribidi (OSX)
If harfbuzz freetype2 fribidi is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a harfbuzz freetype2 fribidi.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=...'
-------------------------- [ERROR MESSAGE] ---------------------------
<stdin>:1:10: fatal error: hb-ft.h: 没有那个文件或目录
compilation terminated.
--------------------------------------------------------------------
ERROR: configuration failed for package ‘textshaping’
* removing ‘/home/ysx/R/x86_64-pc-linux-gnu-library/4.2/textshaping’
Warning in install.packages :
  安装程序包‘textshaping’时退出狀態的值不是0
ERROR: dependency ‘textshaping’ is not available for package ‘ragg’
* removing ‘/home/ysx/R/x86_64-pc-linux-gnu-library/4.2/ragg’
Warning in install.packages :
  安装程序包‘ragg’时退出狀態的值不是0

下载的程序包在
 ‘/tmp/Rtmp3ipD9t/downloaded_packages’里
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.

ERROR MESSAGE部分,R 给我们的提示还是很清楚的:fatal error: hb-ft.h: 没有那个文件或目录缺少这个头文件 (.h 代表 header file)。

ANTICONF 部分,R 贴心的给出了不同系统下哪些软件包包含这个头文件

#  Try install 看这里,简单的文字,应该都能看明白
Configuration failed to find the harfbuzz freetype2 fribidi library. Try installing:
   # deb(后面也备注了 Ubuntu 等),怎么安装呢?apt-get install libharfbuzz-dev libfribidi-dev
 * deb: libharfbuzz-dev libfribidi-dev (Debian, Ubuntu, etc)
   # rpm (centos,febroa),怎么安装呢?yum install harfbuzz-devel fribidi-devel
 * rpm: harfbuzz-devel fribidi-devel (Fedora, EPEL)
 * csw: libharfbuzz_dev libfribidi_dev (Solaris)
   # mac 怎么安装呢 brew install harfbuzz fribidi
 * brew: harfbuzz fribidi (OSX)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

箭术小美女带你解决 Linux/Mac 系统 R 包安装失败的问题_Ubuntu

根据上面的提示,你就知道不同的系统怎么进行安装了。

确定自己的操作系统的版本

运行lsb_release -a获得输出如下,知道操作系统是centos

# 运行的命令
$ lsb_release -a

# 输出,
Distributor ID:    CentOS
Release:    8.4.2105
Codename:    n/a
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

根用户下安装

确定了操作系统,拷贝粘贴对应的安装命令。注意:

  1. 需要有根用户 (root) 权限
  2. 这个命令是在 terminal 下运行的
yum install harfbuzz-devel fribidi-devel
  • 1.

常见错误 1:  在 R 中安装 (注意看开头的>,  这是 R 中运行代码的标识)

箭术小美女带你解决 Linux/Mac 系统 R 包安装失败的问题_r语言_02

> install.packages("deb: libharfbuzz-dev libfribidi-dev")
  • 1.

解析:缺失的软件不是 R 包,而是 Linux 系统中的包,当做 R 包去安装时不对的。

常见错误 2: 还是在 R 中安装(注意看开头的>,  这是 R 中运行代码的标识)

箭术小美女带你解决 Linux/Mac 系统 R 包安装失败的问题_r语言_03

> yum install harfbuzz-devel fribidi-devel
 错误:unexpected symbol  在"yum install" 里
  • 1.
  • 2.

解析: yum 是 centos、fedora 下的包管理器,应该在终端 (terminal) 下运行。

常见错误 3:用错了包安装工具 (注意看开头 (不算开头,输入的命令前面的标识)的$,  这是 Linux 终端中运行代码的标识)

箭术小美女带你解决 Linux/Mac 系统 R 包安装失败的问题_macos_04

ysx@PowerEdge-R740:~/transcriptome $ yum install harfbuzz-devel fribidi-devel
找不到命令"yum",您的意思是:
.....
  • 1.
  • 2.
  • 3.

解析:判断错了操作系统的版本,这个系统是 ubuntu,没有 yum,应该用 apt-get

常见错误 4:没有权限 (注意看开头 (不算开头,输入的命令前面的标识)的$,  这是 Linux 终端中运行代码的标识)

箭术小美女带你解决 Linux/Mac 系统 R 包安装失败的问题_linux_05

ysx@PowerEdge-R740:~/transcriptome $ apt-get install libharfbuzz-dev libfribidi-dev
E: 无法打开锁文件 /var/lib/dpkg/lock-frontend - open (13: 权限不够)
E:  无法获取 dpkg 前端锁....,请看您是否正以 root 用户运行?
  • 1.
  • 2.
  • 3.

解析:应该用 sudo 或切换为 root 用户运行。正确写法如下 (注意看开头 (不算开头,输入的命令前面的标识)的#,  这是 Linux 终端中root 用户运行代码的标识):

# 前提是你得用户有 root 权限
# 会要求你输入密码
# 密码输入进去屏幕不显示,放心大胆的输入就行
ysx@PowerEdge-R740:~/transcriptome $ sudo apt-get install libharfbuzz-dev libfribidi-dev

或者
# 注意@ 前面的用户名为 root
# 注意$变成了#
root@PowerEdge-R740:~/transcriptome # apt-get install libharfbuzz-dev libfribidi-dev
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

问题又出来了

一段时间后(取决于网速,可能几分钟),安装好了,继续回到 R 里面,再次安装 R 包 (注意看开头的>,  这是 R 中运行代码的标识)

> install.packages("ragg")
将程序包安装入‘/home/ysx/R/x86_64-pc-linux-gnu-library/4.2’
(因为‘lib’没有被指定)
还安装相依关系‘textshaping’

试开URL’https://cloud.r-project.org/src/contrib/textshaping_0.3.6.tar.gz'
....
....
-----------------------------[ ANTICONF ]-------------------------------
Configuration failed to find one of freetype2 libpng libtiff-4. Try installing:
 * deb: libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev (Debian, Ubuntu, etc)
 * rpm: freetype-devel libpng-devel libtiff-devel libjpeg-turbo-devel (Fedora, CentOS, RHEL)
 * csw: libfreetype_dev libpng16_dev libtiff_dev libjpeg_dev (Solaris)
If freetype2 libpng libtiff-4 is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a freetype2 libpng libtiff-4.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=...'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

不是前面的解决无效,大家要仔细看,这次除了新的错误,提示还缺少其它的文件,并依旧给出了如何进行安装,ANTICONF部分。

根据提示,再来一次操作:

# 注意@ 前面的用户名为 root
# 注意$变成了#
root@PowerEdge-R740:~/transcriptome # apt-get install libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev
  • 1.
  • 2.
  • 3.

一段时间后(取决于网速,可能几分钟),安装好了,继续回到 R 里面,再次安装 R 包 (注意看开头的>,  这是 R 中运行代码的标识)

> install.packages("ragg")
将程序包安装入‘ /home/ysx/R/x86_64-pc-linux-gnu-library/4.2’
...
DONE(ragg)
  • 1.
  • 2.
  • 3.
  • 4.

这次比较幸运,直接安装成功了,有时还需要再来一遍或着多变,缺什么装什么。

如果只提示缺少 .h 或 .so 未给提供怎么安装怎么办?

也有的时候,软件没这么智能,就孤零零的告诉你:

<stdin>:1:10: fatal error: hb-ft.h: 没有那个文件或目录
compilation terminated.
  • 1.
  • 2.

怎么知道哪个软件包里面有hb-ft.h 呢?

CentOS 下运行这个命令,  输出harfbuzz-devel里面包含hb-ft.h:

root@PowerEdge-R740:~/transcriptome # yum provides "*/hb-ft.h"

harfbuzz-devel-1.7.5-3.el8.x86_64 : Development files for harfbuzz
仓库        :@System
匹配来源:
文件名    :/usr/include/harfbuzz/hb-ft.h

# .so 也一样
root@PowerEdge-R740:~/transcriptome # yum provides "*/hb-ft.so"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

继续安装

root@PowerEdge-R740:~/transcriptome # yum install harfbuzz-devel
  • 1.

Ubuntu 下可以试试apt-file search hb-ft.h