解决Travis构建失败的rgdal软件包问题

4

我曾经在Travis构建中使用rgdal R包,成功地使用了一年左右,几乎没有遇到问题。

但随着最近部署的rgdal 1.4-2版本,之前通过的构建开始失败,并显示以下消息。

In file included from inverser.c:5:0:   
/tmp/Rtmpysf7it/R.INSTALL748c54b7a89/rgdal/inst/include/projects.h:150:33: 
error: conflicting types for ‘projUV’  typedef struct { double u, v; } projUV;
                                 ^ 
In file included from inverser.c:3:0: /usr/include/proj_api.h:54:37:
 note: previous declaration of ‘projUV’ was here
     typedef struct { double u, v; } projUV;

我不确定“旧”的proj_api.h来自何处,以及如何在Travis环境中删除它。

我的travis.yml配置如下:

language: r
dist: trusty
sudo: false

cache:
  packages: yes

r_packages:
  - testthat
  - roxygen2
  - covr

addons:
  apt:
    packages:
      - gdal-bin
      - proj-bin
      - libgdal-dev
      - libgdal1-dev
      - libproj-dev
      - libgeos-dev
      - r-cran-ncdf4
      - libv8-3.14-dev
      - libprotobuf-dev
      - protobuf-compiler
      - libudunits2-dev
      - libnetcdf-dev
      - libjq-dev

before_install:
    - sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable
    - sudo add-apt-repository -y ppa:opencpu/jq
    - sudo apt-get --yes --force-yes update -qq

after_success:
  - Rscript -e 'covr::coveralls()'

非常感谢能够提供解决此问题的任何建议。

3个回答

3

为了澄清Edzer和Roger建议的如何告诉Travis从R-Forge安装的方法。我相信你可以在任何位置添加以下内容到你的.travis.yml文件中:

repos: 
  CRAN: https://cran.rstudio.com
  rforge: http://R-Forge.R-project.org

详细信息请查看Travis R配置文档

或者,您可以在before_install块中直接运行R命令,例如:

before_install:
  - R -e 'install.packages("rgdal", repos=c("http://R-Forge.R-project.org", "http://cran.rstudio.com"))'

这可能会更加明显,但不太整洁。


谢谢,这个解决方案比通过Remotes:降级rgdal要好得多,因为它完全是在Travis级别上进行的,不涉及调整DESCRIPTION文件。 - Jindra Lacko

2
答案2是正确的答案。我是rgdal维护者,并已在邮件和twitter上权威地回答了这个问题。当足够多使用过时PROJ版本(4.9.3之前,即2016年9月之前)的用户确认1.4-3解决了他们的问题后,我将提交1.4-3给CRAN。我不会也永远不会关注SO,但如果您做了正确的事情并发布到R-sig-geo,您会引起我的注意。
我建议对任何仍在使用PROJ 4.8.0的系统施加巨大压力进行升级。该版本于2012年3月13日发布,今天已经7岁了,真的应该让它的位被回收利用。

1

4
另一个选择是从r-forge安装开发版本,该问题已得到解决。命令为 install.packages("rgdal", repos="http://R-Forge.R-project.org") - Edzer Pebesma
1
对于回答者的帖子:这条消息并不意味着rgdal需要PROJ 6,而只是可以与其一起使用。它需要PROJ >= 4.8.0,正如CRAN登陆页面所声明的那样。 - Edzer Pebesma
你如何在 .travis.yml 中指示安装来自 r-forge 的 dev 版本? - jtr13
1
@jtr13 我相信你想要将以下内容添加到.travis.yml文件中: repos: CRAN: https://cran.rstudio.com rforge: http://R-Forge.R-project.org或者只需在 before_install() 部分添加Edzer的命令,但你可能还需要包括CRAN repo以便rgdal可以安装sp依赖项。(啊,无法在评论中换行,因此我将其作为下面的答案发布) - cboettig
1
@EdzerPebesma:我明白了。由于某种原因,我曾将句子“从1.4.1 'rgdal'将在'PROJ'>=6”解释为proj必须大于6.0。我会进行编辑。 - arnfinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接