У меня есть Python проект , для которого я использую tox
для запуска тестов на основе pytest. Я пытаюсь настроить проект для сборки на CircleCI.
В tox.ini
перечислены Python 3.6 и 3.7 как среды:
envlist = py{36,37,},coverage
Я могу успешно запустить tox
в локальная машина в виртуальной среде conda, которая использует Python версию 3.7.
В CircleCI я использую стандартную виртуальную среду Python, поскольку это то, что предусмотрено в примере конфигурации («начало работы») , Тесты tox не выполняются, когда tox пытается создать среду Python 3.6:
py36 create: /home/circleci/repo/.tox/py36
ERROR: InterpreterNotFound: python3.6
Похоже, что при использовании виртуальной среды такого типа tox может найти только интерпретатора той же версии, тогда как если используя виртуальную среду conda, она каким-то образом знает, как создать среду, если она более ранняя. По крайней мере для моего случая (среды Python 3.6 и 3.7 для токса, работающего в среде conda Python 3.7), это работает нормально.
Файл конфигурации CircleCI, который я сейчас использую, выглядит следующим образом:
# Python CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-python/ for more details
#
version: 2
jobs:
build:
docker:
# specify the version you desire here
# CircleCI maintains a library of pre-built images
# documented at https://circleci.com/docs/2.0/circleci-images/
- image: circleci/python:3.7
working_directory: ~/repo
steps:
- checkout
# Download and cache dependencies
- restore_cache:
keys:
- v1-dependencies-{{ checksum "requirements.txt" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run:
name: install dependencies
command: |
python3 -m venv venv
. venv/bin/activate
pip install -e .
pip install tox
- save_cache:
paths:
- ./venv
key: v1-dependencies-{{ checksum "requirements.txt" }}
# run tests with tox
- run:
name: run tests
command: |
. venv/bin/activate
tox
- store_artifacts:
path: test-reports
destination: test-reports
Каков наилучший метод тестирования для нескольких сред с использованием tox на CircleCI? Должен ли я перейти на использование conda, а не venv в CircleCI, и если да, то как бы это добавить? Или есть способ остаться с venv, возможно, изменив его команду создания среды?
Edit
Теперь я обнаружил, что это не спецификация c для CircleCI, так как я получаю аналогичная ошибка при запуске этого токса на Travis CI. Кроме того, я подтвердил, что это работает так, как объявлено в виртуальной среде Python 3.7, созданной с использованием venv
на моей локальной машине, среды py36 и py37 успешно работают.