簡體   English   中英

如何在軟件包安裝期間解決“libRblas.so:沒有這樣的文件或目錄”?

[英]How to resolve 'libRblas.so: No such file or directory' during package installation?

當我嘗試安裝某些需要libRblas.so的軟件包( imputeTS )時,AFAIK 指的是 OpenBLAS ,我收到一個找不到的錯誤:

Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/home/jay/R/x86_64-pc-linux-gnu-library/4.2/fracdiff/libs/fracdiff.so':
  libRblas.so: cannot open shared object file: No such file or directory
Calls: <Anonymous> ... asNamespace -> loadNamespace -> library.dynam -> dyn.load
Execution halted

但是, sessionInfo()表明,R 實際上找到了它。

> sessionInfo()
R version 4.2.1 (2022-06-23)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so

我從這個線程中了解到“也許......另一個版本的 R [已構建],它位於...... [the] $PATH before the packaged version” ,很可能是這種情況; 我以前的 R 版本4.2.0是自編譯的,我通過再次下載源代碼和./configure - make uninstall將其刪除。 不過,這個是通過sudo apt install r-base-core 可能現在某處有些混亂。 不幸的是,引用的線程以不同的方式解決,我現在正在尋找各自的結論。

以下是更多信息:

whereis R給出

~$ whereis R
R: /usr/bin/R /usr/lib/R /usr/lib64/R /etc/R /usr/local/lib/R /usr/share/R /usr/share/man/man1/R.1.gz

從錯誤消息中的相應文件中,使用sudo find ~ -name '<file>'找到libRblas.so fracdiff.so找到。

~/R/x86_64-pc-linux-gnu-library/4.2/fracdiff/libs/fracdiff.so

我已經試過了,

~$ sudo apt install libopenblas-dev

但顯然它已安裝。

libopenblas-dev is already the newest version (0.3.20+ds-1).

按照this的建議, libRlapack.solibRblas.so顯然在我的系統上不存在,而另一個建議只是給出:

~$ sudo update-alternatives --config libblas.so
update-alternatives: error: no alternatives for libblas.so

libRblas.so永遠不應該有“要求”。 簡而言之,R 允許您使用它提供的 BLAS 和 LAPACK(子集)源進行構建,然后您將獲得這個libRblas.so 或者您可以使用系統 BLAS 和 LAPACK 庫,我負責的 Debian(以及因此的 Ubuntu)軟件包可能已經使用了將近 20 年,並且允許您切換 BLAS 安裝(Atlas、OpenBLAS、MKL,返回在當天也轉到,...)。

作為演示,我剛剛啟動了一個合適的基於r2u的 Ubuntu 22.04 Docker 容器,因為它結合了預先制作的 R(使用我的r-base-core包和外部 BLAS 鏈接)以及(真棒!!)將所有CRAN 作為 Ubuntu 二進制文件(請參閱r2u了解更多信息)。 簡而言之:

edd@rob:~$ docker run --rm -ti --security-opt seccomp=unconfined eddelbuettel/r2u:jammy                                                                                                                            
root@818091e49861:/# export PS1="root@r2u_docker:\w# "                                                                                                                                                             
root@r2u_docker:/# echo "192.168.1.114 dirk.eddelbuettel.com" >> /etc/hosts                                                                                                                                        
root@r2u_docker:/# install.r imputeTS              ## one command !!                                                                                                                                                                
Install system packages as root...                                                                                                                                                                                 
Reading package lists... Done                                                                                                                                                                                      
Building dependency tree... Done                                                                                                                                                                                   
Reading state information... Done                                                                                                                                                                                  
Ign https://dirk.eddelbuettel.com/cranapt jammy InRelease                                                                                                                                                         
Hit https://dirk.eddelbuettel.com/cranapt jammy Release                                                                                                                                                           
Hit http://archive.ubuntu.com/ubuntu jammy InRelease                                                                                                                                                              
Hit http://archive.ubuntu.com/ubuntu jammy-updates InRelease                                                                                                                                                      
Hit http://archive.ubuntu.com/ubuntu jammy-backports InRelease                                                                                                                                                    
Hit http://security.ubuntu.com/ubuntu jammy-security InRelease                                                                                                                                                     
Get:1 https://ppa.launchpadcontent.net/marutter/rrutter4.0/ubuntu jammy InRelease [17.5 kB]                                                                                                                        
Fetched 17.5 kB in 0s (0 B/s)                                                                                                                                                                                     
Reading package lists... Done                                                                                                                                                                                      
Building dependency tree... Done                                                                                                                                                                                   
Reading state information... Done                                                                                                                                                                                  
Get:1 https://dirk.eddelbuettel.com/cranapt jammy/main amd64 r-cran-bitops amd64 1.0-7-1.ca2204.1 [25.5 kB]                                                                                                       
Get:2 https://dirk.eddelbuettel.com/cranapt jammy/main amd64 r-cran-glue amd64 1.6.2-1.ca2204.1 [143 kB]                                                                                                           
[... cutting here to satisfy SO quote limit ...]
Setting up r-cran-forecast (8.16-1.ca2204.1) ...
Setting up r-cran-imputets (3.2-1.ca2204.1) ...
root@r2u_docker:/# 

之后我們確實可以啟動 R 並加載它就好了:

root@r2u_docker:/# R

R version 4.2.1 (2022-06-23) -- "Funny-Looking Kid"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(imputeTS)
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
> 

它“按設計”使用外部 BLAS/LAPACK:

root@r2u_docker:/# dpkg -l | grep -i "blas\|lapack" | cut -c-90
ii  libblas-dev:amd64            3.10.0-2ubuntu1                         amd64        Basi
ii  libblas3:amd64               3.10.0-2ubuntu1                         amd64        Basi
ii  liblapack-dev:amd64          3.10.0-2ubuntu1                         amd64        Libr
ii  liblapack3:amd64             3.10.0-2ubuntu1                         amd64        Libr
root@r2u_docker:/# 

所以我認為這可能是你自己在本地編譯 R加上imputeTS不能很好地處理它(它應該,它可能是一個錯誤)的組合。 但我希望這也表明這也可以容易得多。

如果您有更詳細的后續問題,請來到友好、無意義和低容量的r-sig-debian列表。

PS 為了完整起見,容器的sessionInfo()在新會話中:

> sessionInfo()
R version 4.2.1 (2022-06-23)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

loaded via a namespace (and not attached):
[1] compiler_4.2.1 bspm_0.3.9    
> 

PPS 一條動畫 gif 中的“實時”演示在此推文中(推文是因為無法在此處附加超過 2mb 的 gif)。

一些評論讓我走上了正軌,幫助我解決了問題——我將簡要總結一下。

由於懷疑存在依賴關系問題,我安裝了產生錯誤消息的包(在本例中為fracdiff ),並再次嘗試安裝目標包。 錯誤再次發生,但來自不同的包,表明級聯問題。 奇怪的是,我絕對知道該軟件包已安裝,所以我覺得我最初的懷疑得到了證實,我可能在更新 R 時弄亂了libs文件夾,如 OP 中所述。

由於我可以假設這種情況會一次又一次地發生,因此結論是完全卸載 R,這次也卸載軟件包,然后重新安裝所有內容。 現在我可以毫無問題地安裝目標包。

幸運的是,這在 Linux 上非常容易。 此外,所有軟件包都可以在相對無人值守的情況下重新安裝。 操作方法分布在多個線程和站點上,我將把字符串放在一起,添加參考。

這是我在 R 和 Bash 中所做的(你需要su/sudo ):

  1. 存儲包(在 R 中) 1
tmp <- installed.packages()
installedpkgs <- as.vector(tmp[is.na(tmp[,"Priority"]), 1])
saveRDS(installedpkgs, 'installed_old.rds')
  1. 完全刪除 R 2
dpkg -l | grep ^ii | awk '$2 ~ /^r-/ { print $2 }' | sudo xargs apt-get remove --purge -y
  1. 刪除所有 R 包3

這些位置可能與您的不同。

R -e '.libPaths()'
rm -rf /home/jay/R/x86_64-pc-linux-gnu-library/4.2 /usr/local/lib/R/site-library /usr/lib/R/site-library /usr/lib/R/library
  1. 安裝 R(這里用apt4
apt install r-base-core
  1. 恢復 R 包5

這會運行一段時間。 請注意,僅安裝可以在存儲庫中找到的包。

installedpkgs <- readRDS("installed_old.rds")
tmp <- installed.packages()
installedpkgs.new <- as.vector(tmp[is.na(tmp[,"Priority"]), 1])
missing <- setdiff(installedpkgs, installedpkgs.new)
install.packages(missing)
update.packages(ask=FALSE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM