簡體   English   中英

構建我未更改的包突然失敗:對於 Vignettes 和 'arch = x64'

[英]Building my unaltered package suddenly fails: for Vignettes and 'arch = x64'

語境

我一直在使用最新版本(4.1.1)的 R 在 RStudio 中開發一個帶有小插圖的專有軟件包(稱為“ my_pkg ”)。我正在使用以下軟件開發聯想 ThinkPad

       sysname        release        version       machine
     "Windows"       "10 x64"  "build 19043"      "x86-64"

Sys.info()提供。

直到最近,我的devtools工作流程還算順利( 偶爾有一個例外)。 但是,我開始遇到一個非常令人費解的錯誤,該錯誤發生在與之前幾乎相同的條件下,當工作流程順利進行時。

盡管我的小插曲以前總是成功構建的,而我同時沒有編輯它們,但由於架構上的特定原因,現在構建失敗了......

Error : package 'my_pkg' is not installed for 'arch = x64'

...當且僅當我在構建中包含小插曲時。

我從頭開始重新安裝了 R (以及 Rtools 和 RStudio),重新安裝了devtools (及其依賴項),並將我的項目“倒回”到了devtools::check()成功的最后一個 Git 提交 我還與@SteffenMoritz@Alexis等響應者一起進行了廣泛的故障排除,我在Info by Request部分中為他們附加了更多信息。

不幸的是,沒有任何效果。

devtools::check()失敗

當我運行devtools::check()時,一切都開始有希望......

i Updating my_pkg documentation
i Loading my_pkg
Writing NAMESPACE
Writing NAMESPACE
-- Building --------------------------------------------------------------------------------- my_pkg --
Setting env vars:
* CFLAGS    : -Wall -pedantic
* CXXFLAGS  : -Wall -pedantic
* CXX11FLAGS: -Wall -pedantic
-------------------------------------------------------------------------------------------------------
√  checking for file 'C:\Users\greg\Workspace\R\Packages\my_pkg/DESCRIPTION' ...
-  preparing 'my_pkg': (733ms)
√  checking DESCRIPTION meta-information ... 
-  installing the package to build vignettes
         -----------------------------------
-  installing *source* package 'my_pkg' ...
   ** using staged installation
   ** R
   ** inst
   ** byte-compile and prepare package for lazy loading
   ** help
   *** installing help indices
     converting help for package 'my_pkg'
       finding HTML links ... done 
       foo                                     html
       my_pkg-package                          html
   *** copying figures
   ** building package indices
   ** installing vignettes
   ** testing if installed package can be loaded from temporary location

...直到步驟testing if installed package can be loaded from temporary location 這里發生錯誤:

   Error : package 'my_pkg' is not installed for 'arch = x64'
   Error: loading failed
   Execution halted
   ERROR: loading failed
-  removing 'C:/Users/greg/AppData/Local/Temp/RtmpSaabgx/Rinst332419517258/my_pkg'
         -----------------------------------
   ERROR: package installation failed
Error in (function (command = NULL, args = character(), error_on_status = TRUE,  : 
  System command 'Rcmd.exe' failed, exit status: 1, stdout + stderr (last 10 lines):
E> ** building package indices
E> ** installing vignettes
E> ** testing if installed package can be loaded from temporary location
E> Error : package 'my_pkg' is not installed for 'arch = x64'
E> Error: loading failed
E> Execution halted
E> ERROR: loading failed
E> * removing 'C:/Users/greg/AppData/Local/Temp/RtmpSaabgx/Rinst332419517258/my_pkg'
E>       -----------------------------------
E> ERROR: package installation failed
Type .Last.error.trace to see where the error occurred

.Last.error.trace指出了pkgbuild的一個問題:

> .Last.error.trace

 Stack trace:

 1. devtools::check()
 2. withr::with_envvar(pkgbuild::compiler_flags(FALSE), action = "prefix",  ...
 3. base:::force(code)
 4. pkgbuild::build(pkg$path, tempdir(), args = build_args, quiet = quiet,  ...
 5. withr::with_temp_libpaths(rcmd_build_tools(options$cmd, c(options$path,  ...
 6. base:::force(code)
 7. pkgbuild:::rcmd_build_tools(options$cmd, c(options$path, options$args),  ...
 8. pkgbuild:::with_build_tools(callr::rcmd_safe(..., env = env,  ...
 9. withr::with_path(rtools_path(), code)
 10. base:::force(code)
 11. callr::rcmd_safe(..., env = env, spinner = FALSE, show = FALSE,  ...
 12. callr:::run_r(options)
 13. base:::with(options, with_envvar(env, do.call(processx::run,  ...
 14. base:::with.default(options, with_envvar(env, do.call(processx::run,  ...
 15. base:::eval(substitute(expr), data, enclos = parent.frame())
 16. base:::eval(substitute(expr), data, enclos = parent.frame())
 17. callr:::with_envvar(env, do.call(processx::run, c(list(bin, args = real_cmdargs,  ...
 18. base:::force(code)
 19. base:::do.call(processx::run, c(list(bin, args = real_cmdargs,  ...
 20. (function (command = NULL, args = character(), error_on_status = TRUE,  ...
 21. throw(new_process_error(res, call = sys.call(), echo = echo,  ...

我不知道為什么架構

Error : package 'my_pkg' is not installed for 'arch = x64'

應該只是現在的問題。 我的電腦沒有實質性的變化。

盡管消息package installation failed ,並且盡管我運行的是devtools:: check()而不是devtools:: install() ,但該包的行為就好像它已經“中途”安裝了一樣! 我可以在控制台中輸入my_p ,RStudio 會自動完成my_pkg 然后我可以鍵入my_pkg::並且 RStudio 將提供my_pkg中所有可用的函數的標准自動完成列表。

但是,鍵入my_pkg::不僅會@export ed 函數,還會公開我的內部函數和數據,就好像我鍵入my_pkg :::一樣!

使用devtools::install()devtools::build(vignettes = FALSE)成功

奇怪的是,當我實際運行devtools::install()或類似的devtools::build_vignettes(vignettes = FALSE)時,該過程順利完成!

√  checking for file 'C:\Users\greg\Workspace\R\Packages\my_pkg/DESCRIPTION' ...
-  preparing 'my_pkg': (640ms)
√  checking DESCRIPTION meta-information ... 
-  checking for LF line-endings in source and make files and shell scripts (384ms)
-  checking for empty or unneeded directories
   Removed empty directory 'my_pkg/inst/libs'
   Omitted 'LazyData' from DESCRIPTION
-  building 'my_pkg_0.0.0.9000.tar.gz'
   
Running "C:/Users/greg/R/bin/x64/Rcmd.exe" INSTALL \
  "C:\Users\greg\AppData\Local\Temp\Rtmpozvh26/my_pkg_0.0.0.9000.tar.gz" --install-tests 
* installing to library 'C:/Users/greg/R/library'
* installing *source* package 'my_pkg' ...
** using staged installation
** R
** inst
** tests
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
  converting help for package 'my_pkg'
    finding HTML links ... done
       foo                                     html
       my_pkg-package                          html
*** copying figures
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
*** arch - i386
*** arch - x64
** testing if installed package can be loaded from final location
*** arch - i386
*** arch - x64
** testing if installed package keeps a record of temporary installation path
* DONE (my_pkg)
Making 'packages.html' ... done

現在,自動完成功能完全按預期工作, my_pkg::my_pkg:::分別只公開了適當的函數。

devtools::install(build_vignettes = TRUE)devtools::build()失敗

然而,還有一個進一步的情節轉折。 當我使用devtools::install( build_vignettes = TRUE )或類似的devtools::build()時,我得到與devtools::check()類似的錯誤:

√  checking for file 'C:\Users\greg\Workspace\R\Packages\my_pkg/DESCRIPTION' ...
-  preparing 'my_pkg': (672ms)
√  checking DESCRIPTION meta-information ... 
-  installing the package to build vignettes
         -----------------------------------
-  installing *source* package 'my_pkg' ...
   ** using staged installation
   ** R
   ** inst
   ** byte-compile and prepare package for lazy loading
   ** help
   *** installing help indices
     converting help for package 'my_pkg'
       finding HTML links ... done
       foo                                     html
       my_pkg-package                          html
   *** copying figures
   ** building package indices
   ** installing vignettes
   ** testing if installed package can be loaded from temporary location

   Error : package 'my_pkg' is not installed for 'arch = x64'
   Error: loading failed
   Execution halted
   ERROR: loading failed
-  removing 'C:/Users/greg/AppData/Local/Temp/RtmpM7RbHr/Rinst504119422cd/my_pkg'
         -----------------------------------
   ERROR: package installation failed
Error in (function (command = NULL, args = character(), error_on_status = TRUE,  : 
  System command 'Rcmd.exe' failed, exit status: 1, stdout + stderr (last 10 lines):
E> ** building package indices
E> ** installing vignettes
E> ** testing if installed package can be loaded from temporary location
E> Error : package 'my_pkg' is not installed for 'arch = x64'
E> Error: loading failed
E> Execution halted
E> ERROR: loading failed
E> * removing 'C:/Users/greg/AppData/Local/Temp/RtmpM7RbHr/Rinst504119422cd/my_pkg'
E>       -----------------------------------
E> ERROR: package installation failed
Type .Last.error.trace to see where the error occurred

使用devtools::build_vignettes()取得成功

奇怪的是,盡管在構建小插圖時存在上述問題,但當我調用devtools::build_vignettes()無參數或使用dependencies = TRUE時,一切都以某種方式順利運行:

i Building my_pkg vignettes
√ Creating 'doc/'
√ Adding '^doc$' to '.Rbuildignore'
√ Setting active project to '<no active project>'
√ Adding '/doc/' to '.gitignore'
√ Setting active project to '<no active project>'
i Moving backstory.html, intro.html, library.html, template.html, usage.html, backstory.R, intro.R, library.R, template.R, and usage.R to doc/
i Copying backstory.Rmd, intro.Rmd, library.Rmd, template.Rmd, and usage.Rmd to doc/
√ Creating 'Meta/'
√ Adding '^Meta$' to '.Rbuildignore'
√ Setting active project to '<no active project>'
√ Adding '/Meta/' to '.gitignore'
√ Setting active project to '<no active project>'
i Building vignette index

筆記

假設是我的錯,並且我無意中在我的 R 項目中的某個地方引入了一個問題,我切換到了一個完全不同的 Git 分支。 最近對該分支的提交通過了devtools::check()並取得了成功。 然而,即使在切換到這個“安全”分支之后,同樣的問題仍然存在!

在最后一次成功檢查和問題開始之間,我沒有更新:

同樣,這些小插曲在項目的早期就已經存在。

結論

我希望在不久的將來my_pkg的概念驗證,並且這些小插曲對其可用性非常重要。


請求信息

由於“ my_pkg ”是專有的,因此我在此匿名化我的個人和組織信息(名稱、文件路徑等),如上所述。

對於@SteffenMoritz

您介意分享您的說明文件和小插圖標題/元信息嗎?

DESCRIPTION文件:

Package: my_pkg
Title: Proprietary Package for My Org
Version: 0.0.0.9000
Authors@R: 
    person(given = "Greg",
           family = "Lastname",
           role = c("aut", "cre"),
           email = c("glastname@myorg.com"))
Description: The `my_pkg` package is a proprietary project for My Org,
    and as such I have changed the names to project the innocent.
License: file LICENSE
Encoding: UTF-8
LazyData: true
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.2
URL: https://github.com/myorg/my_pkg
BugReports: https://github.com/my_org/my_pkg/issues
Suggests: 
    knitr,
    rmarkdown,
    testthat (>= 3.0.0)
Config/testthat/edition: 3
VignetteBuilder: knitr
Depends: 
    R (>= 2.10)

小插圖標題:

  • intro.Rmd
---
title: "A Catchphrase!"
author: "Gregory Lastname"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{A Catchphrase!}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  # Show no output.
  eval = FALSE, results = "hide",
  # Show no dialog.
  message = FALSE, warning = FALSE,
  # Show no errors.
  error = TRUE, purl = FALSE,
  # Default format.
  collapse = TRUE, comment = "#>"
)
    ```
  • backstory.Rmd
---
title: "A Reference, to Science Fiction"
author: "Gregory Lastname"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{A Reference, to Science Fiction}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  # Show no output.
  eval = FALSE, results = "hide",
  # Show no dialog.
  message = FALSE, warning = FALSE,
  # Show no errors.
  error = TRUE, purl = FALSE,
  # Default format.
  collapse = TRUE, comment = "#>"
)
    ```
  • library.Rmd
---
title: "A Generic One-Liner"
author: "Gregory Lastname"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{A Generic One-Liner}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  # Show no output.
  eval = FALSE, results = "hide",
  # Show no dialog.
  message = FALSE, warning = FALSE,
  # Show no errors.
  error = TRUE, purl = FALSE,
  # Default format.
  collapse = TRUE, comment = "#>"
)
    ```
  • template.Rmd
---
title: "A Well-Written Description"
author: "Gregory Lastname"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{A Well-Written Description}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  # Show no output.
  eval = FALSE, results = "hide",
  # Show no dialog.
  message = FALSE, warning = FALSE,
  # Show no errors.
  error = TRUE, purl = FALSE,
  # Default format.
  collapse = TRUE, comment = "#>"
)
    ```
  • usage.Rmd
---
title: "An Exhortation!"
author: "Gregory Lastname"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{An Exhortation!}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  # Show no output.
  eval = FALSE, results = "hide",
  # Show no dialog.
  message = FALSE, warning = FALSE,
  # Show no errors.
  error = TRUE, purl = FALSE,
  # Default format.
  collapse = TRUE, comment = "#>"
)
    ```

對於@Alexis

如果您使用文本編輯器打開.Rproj文件,您會看到什么?

在 MS 記事本中打開的my_pkg.Rproj文件。 注意:自從最初的提交以來,該文件沒有被修改過。

Version: 1.0

RestoreWorkspace: No
SaveWorkspace: No
AlwaysSaveHistory: Default

EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 2
Encoding: UTF-8

RnwWeave: Sweave
LaTeX: pdfLaTeX

AutoAppendNewline: Yes
StripTrailingWhitespace: Yes
LineEndingConversion: Posix

BuildType: Package
PackageUseDevtools: Yes
PackageInstallArgs: --no-multiarch --with-keep.source
PackageRoxygenize: rd,collate,namespace

要求

如果您從命令行運行R CMD build/INSTALL ...是否有效?

我也是從命令行構建的

greg@CO-GLASTNAME MINGW64 ~/Workspace/R
$ R CMD build C:/Users/greg/Workspace/R/Packages/my_pkg

但我在上面得到了相同的輸出:

* checking for file 'C:/Users/greg/Workspace/R/Packages/my_pkg/DESCRIPTION' ... OK
* preparing 'my_pkg':
* checking DESCRIPTION meta-information ... OK
* installing the package to build vignettes
      -----------------------------------
* installing *source* package 'my_pkg' ...
** using staged installation
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
  converting help for package 'my_pkg'
    finding HTML links ... done
    foo                                     html
    my_pkg-package                          html
*** copying figures
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
Error : package 'my_pkg' is not installed for 'arch = x64'
Error: loading failed
Execution halted
ERROR: loading failed
* removing 'C:/Users/greg/AppData/Local/Temp/RtmpgFIc2r/Rinst1cc0231a6b37/my_pkg'
      -----------------------------------
ERROR: package installation failed

你可能是對的,這是小插圖的問題。 (但當然我不能 100% 確定,因為我不知道你的文件)

關於您對check()install()運行的困惑:

RStudio 的“構建和重新加載不會構建小插曲

這就是為什么您可能必須運行 devtools::install() 才能獲得錯誤。

我會向您發布一些最有可能與小插圖有關的問題(這里也是一個很好的更長的教程):

首先檢查以下幾點:

  1. 該目錄稱為小插圖/而不是小插圖/。

  2. 檢查 .Rbuildignore 未涵蓋小插圖

  3. 確保你有必要的小插圖元數據(你從第一眼看就很好)

很可能這些東西對你來說沒問題(但只是為了檢查)。

在我看來,最可能的問題是,您的說明文件不包含 .Rmd 小插圖的所有必要依賴項

也最好寫:

VignetteBuilder: knitr, rmarkdown

仍然在建議中另外保留 rmarkdown。 也 knitr 到 Suggests 和 VignetteBuilder。

更重要的是(!)您還需要在Suggests的 .Rmd 文件中使用的包。 由於我假設您使用的是 RMarkdown,因此您的小插圖中有一些代碼。 瀏覽您的代碼並查看您正在使用哪些包。 小插圖使用的任何包都應在DESCRIPTION聲明。

我可以想象這也可能是原因,為什么它似乎工作一次,然后在沒有改變任何東西(在你看來)之后它失敗了。

當它工作時,您是否仍然在后台加載了所有必需的包。 因此它不會產生影響,即Suggests中缺少軟件包。

這將是我的第一個猜測,可能是什么問題。 如果這不起作用,我會嘗試刪除小插圖,看看是否是某個小插圖導致了問題。

未解決

截至目前,尚未發布解決名義錯誤的答案。 我發布此消息是為了向遇到相同錯誤的任何用戶澄清,該錯誤仍未得到診斷和解決。 事實上,即使在通過 Git 重置我的項目並從頭開始重新安裝 R(以及 Rtools 和 RStudio)后,該錯誤仍然存​​在。

感謝@SteffenMoritz@Alexis頑強的調試會話。 雖然我們的努力沒有成功,但我感謝他們的時間、努力和友好。 任何在類似問題上掙扎的人都會很好地遵循他們的建議,在答案評論中找到

我會用我將來可能遇到的任何真正的解決方案來更新這篇文章。

在我的情況下解決它的方法是從%\VignetteEngine{knitr::rmarkdown}切換到%\VignetteEngine{knitr::knitr} 我不知道為什么,但它停止了錯誤並放回rmarkdown而不是knitr重現了錯誤。

暫無
暫無

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

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