不同平台sessionInfo()不一致

Inconsistency among sessionInfo() in different platforms

在调试闪亮的应用程序时,我注意到相同的源代码在本地 (macOS Catalina 10.15.6) 和服务器 (Ubuntu 18.04.5 LTS) 上产生的 sessionInfo() 略有不同加载的包条款。 我从应用程序中删除了所有内容,只留下了包的加载:

packages <- c("shiny", "shinythemes", "shinycssloaders", "tidyverse",
"ggthemes", "scales", "feather", "sf", "leaflet", "leaflet.extras",
"RColorBrewer")  
lapply(packages, require, character.only = TRUE)

然后在本地和服务器上打印 sessionInfo()。虽然两台机器共享相同的源代码以及 R 和所有包的版本,但 sessionInfo() 的结果不同。 仔细观察(下面的输出),您可能会注意到“通过命名空间加载的包(而不是附加的)”列表的不同之处在于服务器未加载:

  1. sourcetools_0.1.7
  2. farver_2.0.3
  3. yaml_2.2.1
  4. 此外,在服务器上,它在 crosstalk_1.0.1 之前加载 hms_0.5.3(与本地机器不同)

不确定这些差异是否会很容易导致从“已加载但未附加”包中访问对象的问题,这些包必须以 packagename::.
作为前缀 尽管如此,我还是很惊讶地看到这些差异,想知道是什么导致了这种行为,这是否正常。

输出sessionInfo()本地:

输出sessionInfo()服务器:

如果我加载最小数量的包,仅 Shiny,则存在以下差异:

  1. 服务器列出 xtable 后跟 jsonlite,而在本地则相反;
  2. 服务器列出了 yaml 和 rsconnect,而在本地却没有。

输出sessionInfo()本地:

输出sessionInfo()服务器:

‘rsconnect’是Shiny Server用来部署的包。这解释了为什么它会自动加载到为 Shiny Server 配置的 R 实例中。1

查看它的 dependencies,我们看到它导入了“yaml”包。这就解释了为什么这个包也被加载了。最后,它还导入了“jsonlite”包。并且由于“rsconnect”在 R 启动时作为默认包加载,这解释了为什么它的导入比“闪亮”包的导入更早加载,因此 sessionInfo 的包顺序在您的本地和服务器会话。


1服务器上options('defaultPackages')的值应该包括‘rsconnect’。