摘要
当我在R映像中安装R库并试图使用另一个预先构建的坞映像访问这些库时,我收到了以下消息:
library("dplyr")警告信息: 软件包“dplyr”是在R版本4.1.2下构建的。
由于某些原因,我得到的R版本和我安装的R版本并不相同。有什么方法检查https://cran.r-project.org/bin/linux/ubuntu/focal-cran40/上的包裹吗?我要求的R版本4.0.4和安装版本4.1.2之间的差异是什么原因?
我试过的
在我的dockerfile中,我明确地定义了我的目标版本4.0.4。
RUN apt-get install -y r-base=4.0.4-1.2004.0 r-recommended=4.0.4-1.2004.0
当我验证我的R版本时,它确实显示了4.1.2:
Rscript -e 'R.Version()$version.string'
1 "R版本4.1.2 (2021-11-01)“
当我验证我的R安装时,它显示已经安装了4.0.4:
apt policy r-base
r-base:
Installed: 4.0.4-1.2004.0
Candidate: 4.1.2-1.2004.0
Version table:
4.1.2-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.1-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.0-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.5-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
*** 4.0.4-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
100 /var/lib/dpkg/status
4.0.3-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.2-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.1-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.0-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
3.6.3-2 500
500 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages 复制步骤:
我从一个清晰的Ubuntu20.04图像开始。
docker run -it --entrypoint bash ubuntu:focal
我确定我是当前的,然后添加一些包。
apt-get update && apt-get upgrade -y
apt-get install -y --no-install-recommends software-properties-common dirmngr gdebi-core curltzdata在安装过程中需要一些信息(这可能是我怀疑的任何信息):
1
1添加r项目重新部署的签名密钥并添加回购。$(lsb_release -cs)决定“焦点”。
curl https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc > /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"检查可用的r基包版本:
apt policy r-base
r-base:
Installed: (none)
Candidate: 4.1.3-1.2004.0
Version table:
4.1.3-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.2-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.1-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.1.0-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.5-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.4-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.3-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.2-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.1-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
4.0.0-1.2004.0 500
500 https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/ Packages
3.6.3-2 500
500 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages安装R:
apt-get install -y r-base=4.0.4-1.2004.0 r-recommended=4.0.4-1.2004.0
检查已安装的版本:Rscript -e 'R.Version()$version.string'
1 "R版本4.1.3 (2022-03-10)“
我遗漏了什么?有没有可能是r-rpoject回购有问题?
谢谢你的投入!
发布于 2022-03-16 17:05:22
正如德克Eddelbuettel所建议的,问题在于我如何安装软件包。
r-base和r-recommended是包含更多包的元包。元包可以按版本请求,但不要将请求的版本向下传播到它们的子包。
这意味着,如果您想安装特定版本的R,二进制文件将包含在r-base-core中。r-recommended和推荐的R base包也是如此,它们可以通过apt安装到/usr/lib/R/库中。
要安装所需的特定版本的R,可以将以下内容写入Dockerfile
ARG R_INSTALL_VERSION="4.0.4-1.2004.0"
RUN apt-get install -y \
r-base-core=${R_INSTALL_VERSION} \
r-base-html=${R_INSTALL_VERSION} \
r-doc-html=${R_INSTALL_VERSION} \
r-base-dev=${R_INSTALL_VERSION} 注意,这里排除了r-recommended,因为15个base包中有11个存在上述依赖问题。
如果需要这些包,可以通过apt policy <package-name>列出包的可用版本,并选择与请求的R版本兼容的版本。
此包版本不对应于R版本:
ARG R_INSTALL_VERSION="4.0.4-1.2004.0"
RUN apt-get install -y \
r-base-core=${R_INSTALL_VERSION} \
r-base-html=${R_INSTALL_VERSION} \
r-doc-html=${R_INSTALL_VERSION} \
r-base-dev=${R_INSTALL_VERSION} \
r-cran-cluster=2.1.1-1.2004.0 \
...发布于 2022-03-15 22:10:44
根据我上面的评论,这似乎很困惑。
您可以使用“PPA中的二进制文件是在一个更最新的版本下构建的”:是的,这是一个特性。如果您不想要当前的dplyr (通过当前的r-cran-dplyr),那么就不要通过Michael添加PPA (您按照在自述中心步骤正确地做了这件事)。
断开,如果有,是,你似乎认为你指向那个PPA,以某种方式得到与任意选择的R版本相匹配的版本,这里是您的4.0.4。你不能,我们也不会说你可以。
我们通过其他Rutter的CRAN镜子提供的是
dplyr二进制文件最近表示它是在4.0.4下构建的。总之,这不是一种时光机机制。
(为此,您可以查看RSPM构建,我有一个容器rocker/r-rspm:20.04可以使用RSPM,您可以尝试它们提供的日期索引支持。默认情况下,我不使用enable )。)
如果我误解了什么,请添加一个评论,并可能澄清以上。r-sig-debian列表也可用于更多后续工作。
编辑:根据评论中的讨论,我们现在更清楚了。OP只限制了一个包的集合,并期望apt会神奇地扩展。事情不是这样发生的。基于我所写的其他一些Dockerfile,我推荐一些类似于
&& apt-get install -t unstable -y --no-install-recommends \
# ... some omitted ...
r-base=${R_BASE_VERSION}-* \
r-base-dev=${R_BASE_VERSION}-* \
r-recommended=${R_BASE_VERSION}-* \
# ... more lines omitted ...这就是我在构建r-base容器时强制使用版本的方式。版本化的r-base-dev将引入版本化的r-base-core容器,您也可以显式地列出它。
https://stackoverflow.com/questions/71489404
复制相似问题