我已经开发了一个包,我希望与同事一起分享工作。
我有一个网络驱动器,我在其中创建了如下所示的本地存储库结构:
MyRepo
\__bin
\__windows
\__contrib
\__src
\__contrib
所有文件夹都是空的。
所以我使用“Build / More / Build source package”菜单在Windows上使用RStudio构建了我的包,它创建了一个tar.gz文件。
然后我尝试了:
drat::insertPackage("../myPkg_0.0.0.9000.tar.gz",
repodir = "file://networkdrive/path/to/MyRepo",
action = "prune")
但这给了我一个错误:
Error: Directory file://networkdrive/path/to/MyRepo not found
这很奇怪,因为file.exists(//networkdrive/path/to/MyRepo)
返回true。
好的,然后我试过了:
drat::insertPackage("../myPkg_0.0.0.9000.tar.gz",
repodir = "//networkdrive/path/to/MyRepo",
action = "prune")
如果没有存储库路径中的file:
,我会收到另一个错误:
tar (child): "//networkdrive/path/to/MyRepo/src/contrib/myPkg_0.0.0.9000.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
/usr/bin/tar: Child returned status 2
/usr/bin/tar: myPkg/DESCRIPTION: Not found in archive
/usr/bin/tar: Exiting with failure status due to previous errors
reading DESCRIPTION for package ‘myPkg’ failed with message:
cannot open the connection
但是当我进入“// networkdrive / path / to / MyRepo / src / contrib”文件夹时,我绝对可以看到尽管出现错误消息但已复制的myPkg_0.0.0.9000.tar.gz文件。
有人可以帮忙吗?
> sessionInfo()
R version 3.3.3 (2017-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252 LC_MONETARY=French_France.1252 LC_NUMERIC=C LC_TIME=French_France.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] drat_0.1.2 tools_3.3.3 git2r_0.18.0
答案 0 :(得分:2)
我知道这很老了,但是我的同事遇到了同样的问题并找到了这篇文章。我相信问题可能是目录名称中没有尾部斜杠。我已经能够使用映射网络驱动器重新创建该错误。我可以使用“ H:/ MyRepo /”代替“ H:/ MyRepo”来解决此问题。
我还没有尝试使用“ file://”格式,但是我想包括我的答案,以防其他人遇到这个问题。
答案 1 :(得分:0)
好的,经过一些研究,这是我的结论。
它不起作用的原因是tools::write_PACKAGES
功能不适用于网络驱动器。周期。
我手动将我的包复制到网络驱动器上,然后将setwd()
运行到其位置并执行write_PACKAGES(".", type="source")
,我也遇到了同样的错误。
为了使这项工作,我只是将package.tar.gz文件保留在本地驱动器上,在本地运行tools::write_PACKAGES
命令,然后将文件移动到网络驱动器。
使用options(repos = c(MyRepo = "file://networkdrive/path/to/MyRepo/"))
将网络驱动器添加到我的存储库列表中:RStudio和available.packages
找到我的包。
这并不完全令人满意,但我认为这是今天唯一的方式。
答案 2 :(得分:0)
我也遇到了这个问题,今天终于解决了。
对我来说,问题不仅存在于网络位置,还发生在C:驱动器上。根本原因是用于解压缩package目录中现有软件包的tar.exe版本。在utils::untar
函数中调用tools::write_PACKAGES
。
utils::untar的文档说明,在Windows上,首先尝试使用外部tar.exe。果然,我安装了一个带有Git的版本,当在文件名中使用冒号时,使用默认参数时该版本将失败。通过将环境变量TAR设置为“内部”,我能够强制utils::untar
使用RBuildTools版本的tar.exe。
drat::insertPackage
现在有效。