【问题标题】:Installing TinyTeX in a Singularity container在 Singularity 容器中安装 TinyTeX
【发布时间】:2019-12-11 03:52:57
【问题描述】:

我正在用 RMarkdown 写一篇论文,为了获得更好的可重复性,我想将所有必需的软件容器化到一个 singularity 容器中。不幸的是,当我尝试安装 TinyTeX(推荐用于 Rmarkdown 并且我更喜欢 TeXLive 不会过度膨胀容器)时,它失败并显示以下错误消息(完整的构建日志已粘贴here):

Can't locate TeXLive/TLConfig.pm in @INC (you may need to install the TeXLive::TLConfig module) (@INC contains: /~/.TinyTeX/texmf-dist/scripts/texlive /~/.TinyTeX/tlpkg /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at ~/.TinyTeX/bin/x86_64-linux/tlmgr line 100.
BEGIN failed--compilation aborted at ~/.TinyTeX/bin/x86_64-linux/tlmgr line 100.

这是构建定义文件,基本上是用一个非常精简的ubuntu 18.04然后执行%post部分安装软件

BootStrap: library
From: ubuntu:18.04

%post
  # Add universe repository
  echo "deb http://us.archive.ubuntu.com/ubuntu bionic universe" >> /etc/apt/sources.list
  apt -y update
  # Install utilites
  apt install -y wget
  # Install R
  apt install -y r-base-core
  ## Install RMarkdown and TinyTeX
  R --slave -e 'install.packages(c("rmarkdown","tinytex")); tinytex::install_tinytex()'

  # Clean
  apt-get clean

%environment
  export LC_ALL="en_US.UTF-8"

%labels
  Author DP

我也尝试过tinytex::install_tinytex(dir="/opt/tinytex"),但这似乎并没有改变任何东西。有谁知道出了什么问题?

【问题讨论】:

    标签: ubuntu-18.04 singularity-container tinytex


    【解决方案1】:

    该错误消息抱怨您的图像(或者,更有可能是您的路径)缺少 TeXLive::TLConfig perl 模块。

    我的猜测是安装后路径内容没有与已安装的模块一起重新散列。最简单的解决方案是将其分解为两个命令:

    R --slave -e 'install.packages(c("rmarkdown","tinytex"))'
    R --slave -e 'tinytex::install_tinytex()'
    

    当我在本地尝试时安装成功。

    【讨论】:

    • 我仍然收到错误消息(R 4.0 和 Ubuntu 20.04)。当我通过将wget -qO- "https://yihui.org/gh/tinytex/tools/install-unx.sh" | sh 放入 %post` 进行安装时,它也会持续存在。
    【解决方案2】:

    如果图像仅用于文档生成,则可能有用的替代方法是将带有 rmarkdown 和 tex(例如 https://hub.docker.com/r/rocker/verse)的 docker 图像转换为奇异图像。

    使用singularity pull docker://rocker/verse,您可以为最新版本执行此操作,或使用verse:version_number 为特定版本执行此操作。

    【讨论】:

    • 谢谢,但不幸的是,这不仅仅是为了创建文档;整个数据分析也将被容器化,以使整篇论文(以及结果本身)具有可重复性,并让人们可以轻松地对自己的数据使用我们的分析方法。
    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    相关资源
    最近更新 更多