Python 3.x Gitlab CI/CD:使用Conda运行的Pytest

Python 3.x Gitlab CI/CD:使用Conda运行的Pytest,python-3.x,continuous-integration,gitlab,pytest,conda,Python 3.x,Continuous Integration,Gitlab,Pytest,Conda,上下文:我正在尝试设置一个gitlab CI/CD,在推送代码时测试我的构建并运行pytest测试 问题:当我推送我的代码时,CI/CD作业失败,说明: /bin/bash: line 55: pytest: command not found ERROR: Job failed: exit code 1 问题:如何消除错误,如何正确设置gitlab CI/CD? 详细信息:我(部分)遵循了,并创建了一个.gitlab ci.yml文件,如下所示: image: continuumio/min

上下文:我正在尝试设置一个gitlab CI/CD,在推送代码时测试我的构建并运行pytest测试

问题:当我推送我的代码时,CI/CD作业失败,说明:

/bin/bash: line 55: pytest: command not found
ERROR: Job failed: exit code 1
问题:如何消除错误,如何正确设置gitlab CI/CD?

详细信息:我(部分)遵循了,并创建了一个
.gitlab ci.yml
文件,如下所示:

image: continuumio/miniconda3:latest

testbuild :
  stage: build
  script:
    - conda create --name test_env --file requirements.txt
    - source activate test_env
    - python setup.py install

tests:
  stage: test
  script:
    - cd tests && pytest .
我的项目架构:

$ tree -L 1
project
├── package1/
├── package2/
├── data/
├── out/
├── __pycache__
├── requirements.txt
├── setup.py
└── tests/
我的
requirements.txt
(为了方便读者,从许多无用的东西中剥离出来),它是用命令
conda list-e
创建的:

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: linux-64
scikit-learn=0.20.0=py36h4989274_1
scipy=1.1.0=py36hfa4b5c9_1
# ...
setuptools=40.4.3=py36_0
pip=10.0.1=py36_0
py=1.7.0=py36_0
pytest=3.9.1=py36_0
python=3.6.6=h6e4f718_2
wheel=0.32.1=py36_0
#此文件可用于创建环境,使用:
#$conda create--name--file
#平台:linux-64
scikit学习=0.20.0=py36h4989274_1
scipy=1.1.0=py36hfa4b5c9_1
# ...
setuptools=40.4.3=py36_0
pip=10.0.1=py36_0
py=1.7.0=py36_0
pytest=3.9.1=py36_0
python=3.6.6=h6e4f718_2
车轮=0.32.1=py36_0

我已将我的
.gitlab ci.yml
更改为:

image: continuumio/miniconda3:latest

testbuild :
  stage: build
  script:
    - conda create --name test_env --file requirements.txt
    - source activate test_env
    - python setup.py install
    - cd tests && pytest .
在同一部分中重新组合
测试
测试构建
。它现在可以工作了,它安装了所有的东西并运行测试,尽管这样做感觉很糟糕,因为我不再做分离了


正如hoefling在评论中所说的,问题在于gitlab没有在阶段之间保护环境。如果你真的想把这两者分开,看看这个:

requirements.txt的内容是什么?哦,是的,我知道我忘了什么,对不起。它已被编辑。我没有列出整个列表,因为它感觉有很多内容,但我试着列出重要的依赖项(首先是pytest)。可能conda env激活在两个阶段之间未设置,尝试在测试阶段重新激活它:
cd-tests&&source-activate-test\u-env&&pytest。
我按照您编写的那样做,得到了一些不同的东西:
$cd-tests&&source-activate-test\u-env&&pytest。找不到conda环境:test_env您可以使用conda info--envs列出所有可发现的环境。
看起来gitlab没有在阶段之间保留环境。看看。我同意这个解决方案(因为我自己花了很多时间来解决这个问题!)。您也可以使用condaenvcreate-f,但我觉得condacreate目前更加灵活。实际上,您可以使用“conda create”与“conda env create”进行脱机操作(假设您的基本conda repo中有所需的包)。