为Travis构建安装Python和R?

时间:2017-06-01 21:50:16

标签: python r travis-ci

我一直致力于通过简单的服务器脚本和套接字连接与Python接口的R包。我可以在我自己的机器上进行测试,但我也想在Travis版本上进行测试(我不想完成设置Linux VM的工作)。要做到这一点,我需要一个Python安装,我可以在我的R包测试中传递路径,以及要使用的端口号。

我已经看过this answer建议安装多个Python版本是可能的,但我不确定如何处理

  1. 指定Python可执行文件的路径
  2. 选择测试的端口号。还应该注意我用于Python服务器的Python脚本'使用' localhost'。
  3. 是否有可能在特拉维斯做我想做的事情? 应该我想用Travis做这件事吗?

    编辑这是我的Travis配置:

    language: r
    r:
      - release
      - devel
    cache: packages
    sudo: false
    
    matrix:
      include:
        - python:2.7
        - python:3.6
    
    # Be strict when checking our package
    warnings_are_errors: true
    
    # System dependencies for HTTP calling
    r_binary_packages:
     - jsonlite
     - R6
    

    这是我的R包中的例子:

    pypath = Sys.which('python') 
    if(nchar(pypath) > 0) {
      py = PythonEnv$new(port = 6011, path = pypath)
      py$start
      py$running
      py$set(a = 5)
      py$get('a')
      py$stop
    } else {
      message("No Python environment available")
    }
    

    我的示例肯定会找到一个 Python路径,但失败并显示错误

      

    socketConnection中的警告(port = self $ port,open =" r +",blocking =   TRUE,:localhost:6011无法打开

         

    socketConnection错误(port = self $ port,open =" r +&#34 ;, blocking = TRUE,:
      无法打开连接

    我用另一个端口测试了这个并发生了同样的错误。

    编辑2

    我还尝试过主机127.0.0.10.0.0.0,但没有骰子。根据Travis的文档,这应该有用......也许是R容器的一个问题?

2 个答案:

答案 0 :(得分:1)

这是我用于我的吡咯包装的travis.yml。它只是安装R usinq ubuntu软件包管理器:

language: python
python:
  - "3.6"
install:
  - pip install cython pytest hypothesis
  - sudo apt-get install -y r-base
  - echo 'source("https://bioconductor.org/biocLite.R"); biocLite("S4Vectors"); biocLite("GenomicRanges")' > install.R
  - python setup.py install

script:
  - py.test tests/

另一种方法是通过conda安装R。这是pyranges包中的示例:

# Stolen from http://conda.pydata.org/docs/travis.html
language: python
python:
  # We don't actually use the Travis Python, but this keeps it organized.
  - "3.6"
install:
  - sudo apt-get update
  # We do this conditionally because it saves us some downloading if the
  # version is the same.
  - wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh;
  - bash miniconda.sh -b -p $HOME/miniconda
  - export PATH="$HOME/miniconda/bin:$PATH"
  - hash -r
  - conda config --set always_yes yes --set changeps1 no
  - conda update -q conda
  - conda config --add channels bioconda
  - conda config --add channels r
  # Useful for debugging any issues with conda
  - conda info -a
  - conda create -q -n test-environment python=$TRAVIS_PYTHON_VERSION numpy scipy pandas pytest pytest-cov cython tabulate hypothesis bedtools # ray
  - source activate test-environment
  - python setup.py install # will install ncls
  - python --version
  - python -c 'import pandas as pd; print(pd.__version__)'
  - ls tests

script: py.test -v tests # verbose to see that tests run and so that travis does not time out on hypothesis tests

答案 1 :(得分:1)

您的问题标题和问题正文完全不同。

关于python + R问题

类似于The Unfun Cat's answer,它使用travis安装python并使用apt安装R,您可以将travis用于R并使用apt安装python:

language: r
install:
  - sudo apt-get install -y python2.7 python3.6

请注意,travis也has an apt addon可以使您的.yaml更加整洁(但可移植性可能会降低)。

language: r
addons:
  apt:
    packages:
    - python2.7
    - python3.6

Sys.which应该以{{1​​}}和python2.7的身份访问python3.6,而不仅仅是“ python”。 which python将返回上次安装的版本或上一次安装的python2*


关于网络问题

有许多原因可能导致您无法建立连接。 一个常见的原因是该端口已被使用。 有时X窗口系统(ref)使用端口6011,因此travis的服务之一可能正在使用它。

使用this reference on how to check for used ports,您可以尝试添加类似内容

sudo lsof -i -P -n | grep LISTEN | grep 6011

到您的travis.yaml,这样您就可以在日志中查看是否使用了端口。 您也可以在脚本中尝试使用其他未使用的端口号。

我确实发现this github comment特别引用了R的类似问题;也许您可以在那找到更多。