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’裡
在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)
根據上面的提示,你就知道不同的系統怎麼進行安裝了。
确定自己的作業系統的版本
運作lsb_release -a獲得輸出如下,知道作業系統是centos
# 運作的指令
$ lsb_release -a
# 輸出,
Distributor ID: CentOS
Release: 8.4.2105
Codename: n/a
根使用者下安裝
确定了作業系統,拷貝粘貼對應的安裝指令。注意:
- 需要有根使用者 (root) 權限
- 這個指令是在 terminal 下運作的
yum install harfbuzz-devel fribidi-devel
常見錯誤 1: 在 R 中安裝 (注意看開頭的>, 這是 R 中運作代碼的辨別)
> install.packages("deb: libharfbuzz-dev libfribidi-dev")
解析:缺失的軟體不是 R 包,而是 Linux 系統中的包,當做 R 包去安裝時不對的。
常見錯誤 2: 還是在 R 中安裝(注意看開頭的>, 這是 R 中運作代碼的辨別)
> yum install harfbuzz-devel fribidi-devel
錯誤:unexpected symbol 在"yum install" 裡
解析: yum 是 centos、fedora 下的包管理器,應該在終端 (terminal) 下運作。
常見錯誤 3:用錯了包安裝工具 (注意看開頭 (不算開頭,輸入的指令前面的辨別)的$, 這是 Linux 終端中運作代碼的辨別)
ysx@PowerEdge-R740:~/transcriptome $ yum install harfbuzz-devel fribidi-devel
找不到指令"yum",您的意思是:
.....
解析:判斷錯了作業系統的版本,這個系統是 ubuntu,沒有 yum,應該用 apt-get
常見錯誤 4:沒有權限 (注意看開頭 (不算開頭,輸入的指令前面的辨別)的$, 這是 Linux 終端中運作代碼的辨別)
ysx@PowerEdge-R740:~/transcriptome $ apt-get install libharfbuzz-dev libfribidi-dev
E: 無法打開鎖檔案 /var/lib/dpkg/lock-frontend - open (13: 權限不夠)
E: 無法擷取 dpkg 前端鎖....,請看您是否正以 root 使用者運作?
解析:應該用 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
問題又出來了
一段時間後(取決于網速,可能幾分鐘),安裝好了,繼續回到 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=...'
不是前面的解決無效,大家要仔細看,這次除了新的錯誤,提示還缺少其它的檔案,并依舊給出了如何進行安裝,ANTICONF部分。
根據提示,再來一次操作:
# 注意@ 前面的使用者名為 root
# 注意$變成了#
root@PowerEdge-R740:~/transcriptome # apt-get install libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev
一段時間後(取決于網速,可能幾分鐘),安裝好了,繼續回到 R 裡面,再次安裝 R 包 (注意看開頭的>, 這是 R 中運作代碼的辨別)
> install.packages("ragg")
将程式包安裝入‘ /home/ysx/R/x86_64-pc-linux-gnu-library/4.2’
...
DONE(ragg)
這次比較幸運,直接安裝成功了,有時還需要再來一遍或着多變,缺什麼裝什麼。
如果隻提示缺少 .h 或 .so 未給提供怎麼安裝怎麼辦?
也有的時候,軟體沒這麼智能,就孤零零的告訴你:
<stdin>:1:10: fatal error: hb-ft.h: 沒有那個檔案或目錄
compilation terminated.
怎麼知道哪個軟體包裡面有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"
繼續安裝
root@PowerEdge-R740:~/transcriptome # yum install harfbuzz-devel
Ubuntu 下可以試試apt-file search hb-ft.h