pandoc версии 1.12.3 или выше требуется и не найден (R блестящий)

У меня проблема с генерацией отчета в формате PDF из моего приложения, которое размещено на сервере.

приложение работает нормально, но когда я нажимаю кнопку, чтобы загрузить отчет, я получаю эту ошибку:

 pandoc version 1.12.3 or higher is required and was not found.

Проблема в том, что если я наберу pandoc -v Я получил:

 pandoc 1.12.3.3
 Compiled with texmath 0.6.6, highlighting-kate 0.5.6.1.
Syntax highlighting is supported for the following languages:
    actionscript, ada, apache, asn1, asp, awk, bash, bibtex, boo, c, changelog,
    clojure, cmake, coffee, coldfusion, commonlisp, cpp, cs, css, curry, d,
    diff, djangotemplate, doxygen, doxygenlua, dtd, eiffel, email, erlang,
    fortran, fsharp, gnuassembler, go, haskell, haxe, html, ini, java, javadoc,
    javascript, json, jsp, julia, latex, lex, literatecurry, literatehaskell,
    lua, makefile, mandoc, markdown, matlab, maxima, metafont, mips, modelines,
    modula2, modula3, monobasic, nasm, noweb, objectivec, objectivecpp, ocaml,
    octave, pascal, perl, php, pike, postscript, prolog, python, r,
    relaxngcompact, restructuredtext, rhtml, roff, ruby, rust, scala, scheme,
    sci, sed, sgml, sql, sqlmysql, sqlpostgresql, tcl, texinfo, verilog, vhdl,
    xml, xorg, xslt, xul, yacc, yaml
 Default user data directory: /home/daniele/.pandoc
 Copyright (C) 2006-2013 John MacFarlane
 Web:  http://johnmacfarlane.net/pandoc
 This is free software; see the source for copying conditions.  There is no
 warranty, not even for merchantability or fitness for a particular purpose.

Итак, я полагаю, у меня есть подходящая версия для этого. TexLive также установлен и путь находится в $PATH,

Server.R

library(shiny)
library(drsmooth)
library(shinyBS)
library(knitr)
library(xtable)
library(rmarkdown)

shinyServer(function(input, output,session) { 

 output$downloadReport <- downloadHandler(
filename = function() {
  paste('report', sep = '.','pdf')
},

content = function(file) {
  src <- normalizePath('report.Rmd')

  # temporarily switch to the temp dir, in case you do not have write
  # permission to the current working directory
  owd <- setwd(tempdir())
  on.exit(setwd(owd))
  file.copy(src, 'report.Rmd')

  library(rmarkdown)
  out <- render('report.Rmd')
  file.rename(out, file)
})

output$tb <- renderUI({
             p(h4("Report")),
            "Dowload a the report of your analysis in a pdf format",
            tags$br(),downloadButton('downloadReport',label="Download report"),
            tags$em("This option will be available soon")
     })
})

* report.Rmd * не содержит никаких вычислений, это только текст. Генерация PDF отлично работает на моей локальной версии (MacOS), но не на сервере.

Заранее спасибо, и я здесь, чтобы предоставить другую информацию, если это необходимо.

Daniele

12 ответов

Решение

Зайдите в RStudio и найдите системную переменную среды для RSTUDIO_PANDOC

Sys.getenv("RSTUDIO_PANDOC")

Затем поместите это в свой скрипт R до вызова команды рендеринга.

Sys.setenv(RSTUDIO_PANDOC="--- insert directory here ---")

Это сработало для меня после того, как я изо всех сил пытался найти, как rmarkdown находит Пандока. Мне пришлось проверить GitHub, чтобы посмотреть на источник.

Другой вариант, чтобы это работало для всех ваших сценариев R, - это глобальное определение этой переменной.

В Debian/Ubuntu добавьте следующую строку в ваш файл.bashrc:

export RSTUDIO_PANDOC=/usr/lib/rstudio/bin/pandoc

В macOS добавьте следующее в ваш файл.bash_profile:

export RSTUDIO_PANDOC=/Applications/RStudio.app/Contents/MacOS/pandoc

В Windows (используя Git Bash) добавьте в файл.bashrc следующее:

export RSTUDIO_PANDOC="/c/Program Files/RStudio/bin/pandoc/"

Самый простой способ решить эту проблему - это передать команду Sys.setenv(..) внутри команды crontab перед вызовом RMarkdown::render. Вам нужно разделить две команды точкой с запятой:

R -e "Sys.setenv(RSTUDIO_PANDOC='/usr/lib/rstudio-server/bin/pandoc'); rmarkdown::render('File.Rmd', output_file='output.html')"

(Помните, что путь к rstudio-server отличается от несерверной версии)

Я использую Arch Linux и RStudio... единственное, что у меня сработало, это:

sudo pacman -S pandoc

:)

Для тех, кто не использует RStudio, вам может потребоваться установить pandoc в вашей системе. Для меня это было

sudo pacman -S pandoc

и это сработало (Arch Linux).

Для Windows 10 RStudio 2022.12.0

Pandoc устанавливается вместе с RStudio, поэтому я предпочитаю использовать уже установленный pandoc.exe. Насколько я могу судить, место его установки время от времени меняется. За последние пару лет я видел его в следующих местах (верхний — там, где он находится с моей текущей версией RStudio).

Январь 2023 г. — «C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools»
Август 2022 г. — «C:/Program Files/RStudio/bin/quarto/bin/tools»
«C:/Program Files/RStudio/bin/quarto/bin"
"C:/Program Files/RStudio/bin/pandoc"

Как только вы узнаете, где находится предустановленный pandoc, вы можете включить эту строку в свой файл .R, как указано в верхнем ответе от Chris/Yihui, и это работает для меня.

      Sys.setenv(RSTUDIO_PANDOC = "C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools")

Если у кого-то есть эта проблема, а также использовать анаконду, возможно, у них была моя проблема. Оболочка rstudio не загружает файл.bashrc при запуске, что означает, что ваша версия pandoc установлена ​​в anaconda Rstudio не найдет его. Установка pandoc отдельно с помощью команды вроде sudo pacman -S pandoc работал на меня!

У меня была аналогичная проблема с pandocна Debian 10 при создании документа с ограниченным объемом ресурсов. в Makefile то, что я сделал, было:

# use rstudio pandoc
# this rule sets the PANDOC environment variable from the shell
build_book1:
    export RSTUDIO_PANDOC="/usr/lib/rstudio/bin/pandoc";\
    Rscript -e 'bookdown::render_book("index.Rmd", "bookdown::gitbook")'

# use rstudio pandoc
# this rule sets the environment variable from R using multilines
build_book2:
    Rscript -e "\
    Sys.setenv(RSTUDIO_PANDOC='/usr/lib/rstudio/bin/pandoc');\
    bookdown::render_book('index.Rmd', 'bookdown::gitbook')"

Эти два правила эквивалентны и успешно связывают книгу.

Мне просто не нравились длинные Rscript команда:

Rscript -e "Sys.setenv(RSTUDIO_PANDOC='/usr/lib/rstudio/bin/pandoc'); bookdown::render_book('index.Rmd', 'bookdown::gitbook')"

В Windows и без RStudio вы можете установить pandoc с помощью choco install pandocили через веб-сайт pandoc, https://pandoc.org/ .

Не забудьте перезапустить IDE, чтобы убедиться, что новая установка активируется.

Эй, я просто победил эту ошибку. Я решил эту проблему, удалив 2 файла pandoc, "pandoc" и "pandoc-citeproc" из папки блестящего сервера. Затем я создал ссылку для каждого из этих файлов из папки rstudio-server. Оно работало завораживающе. Это было проблемой для меня, когда я пытался встроить листовки в документы rmarkdown, используя блестящий сервер на машине с Linux. Мне показалось странным, что когда я запустил его в rstudio на той же машине с Linux, он работал нормально, но не тогда, когда я запустил его с использованием глянцевого сервера. Таким образом, установка pandoc на блестящий сервер устарела. ура

Если вы пытаетесь запустить скрипт из командной строки в Windows, вам просто нужно указать путь к каталогу в переменной PATH *. Вы также можете создать отдельную переменную User с именем RSTUDIO_PANDOC и присвоить этой переменной каталог *. Затем закройте и снова откройте все терминалы, чтобы обновить системные пути. **

* Экспериментируйте с трейлингом / если у вас возникли проблемы. ** Я не смог указать путь UNC. // в начале пути хранились функции pandoc пакета rmarkdown. Если вы используете UNC-путь, вы должны сопоставить его с диском и указать букву диска. Есть способы сделать это динамически. Я использую DOS/ пакетный скрипт, который я нашел через Google.

Я столкнулся с аналогичной проблемой в плагине IntelliJ R. Я решил это, скопировав файл pandoc в~/.IntelliJIdea2019.3/config/plugins/rplugin/pandoc

Другие вопросы по тегам