我有一个python项目,它使用了需要构建的库。鉴于我使用anaconda。我想创建一个travis计划,让我测试多个python版本,我无法做到。这就是我所拥有的:
requirements.yml
文件,如下所示:channels: - kne dependencies: - numpy - pytest - numpy - scipy - matplotlib - seaborn - pybox2d - pip: - gym - codecov - pytest - pytest-cov
我的.travis.yml
包含:
language: python
# sudo false implies containerized builds
sudo: false
python:
- 3.5
- 3.4
before_install:
# Here we download miniconda and install the dependencies
- export MINICONDA=$HOME/miniconda
- export PATH="$MINICONDA/bin:$PATH"
- hash -r
- wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh
- bash miniconda.sh -b -f -p $MINICONDA
- conda config --set always_yes yes
- conda update conda
- conda info -a
- echo "Python version var"
- echo $TRAVIS_PYTHON_VERSION
- conda env create -n testenv -f environment.yml python=$TRAVIS_PYTHON_VERSION
- source activate testenv
install:
- python setup.py install
script:
- python --version
- python -m pytest --cov=.
- codecov
如果我将python版本放入environment.yml
它可以正常工作,但我不能使用多个python版本。对我来说,似乎提供了-f
,它会忽略为conda env create
列出的任何其他包。
此外,在env创建后添加- conda install -n testenv python=$TRAVIS_PYTHON_VERSION
不起作用。
UnsatisfiableError: The following specifications were found to be in conflict:
- functools32 -> python 2.7.*
- python 3.5*
Use "conda info <package>" to see the dependencies for each package.
我该怎么做才能让它发挥作用?
//如果您想了解更多详情,请访问:https://travis-ci.org/mbednarski/Chiron/jobs/220644726
答案 0 :(得分:1)
在创建conda环境之前,您可以使用sed
修改environment.yml文件中的python依赖项。
在environment.yml中包含python:
channels:
- kne
dependencies:
- python=3.6
- numpy
- pytest
- numpy
- scipy
- matplotlib
- seaborn
- pybox2d
- pip:
- gym
- codecov
- pytest
- pytest-cov
然后修改.travis.yml:
before_install:
# Here we download miniconda and install the dependencies
- export MINICONDA=$HOME/miniconda
- export PATH="$MINICONDA/bin:$PATH"
- hash -r
- wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh
- bash miniconda.sh -b -f -p $MINICONDA
- conda config --set always_yes yes
- conda update conda
- conda info -a
- echo "Python version var"
- echo $TRAVIS_PYTHON_VERSION
# Edit the environment.yml file for the target Python version
- sed -i -E 's/(python=)(.*)/\1'$TRAVIS_PYTHON_VERSION'/' ./environment.yml
- conda env create -n testenv -f environment.yml
- source activate testenv
sed
正则表达式将文本python = 3.6替换为目标python版本的等效文件。
BTW:我在您的存储库中看到您通过使用多个environment.yml文件解决了这个问题。这似乎是合理的,甚至对于某些依赖项来说是必需的,但对于许多Python版本来说可能很繁琐。