¿Cómo configurar varios intérpretes en CircleCI usando Tox y Poetry?

1

Estoy configurando un paquete reutilizable para Django. Estoy usando Poetry como administrador de paquetes y estoy usando tox para probar en múltiples entornos de Python. Sin embargo, sigo recibiendo el siguiente error en CircleCI:

py27-django111: commands succeeded
ERROR:  py34-django111: InterpreterNotFound: python3.4
ERROR:  py34-django20: InterpreterNotFound: python3.4
ERROR:  py34-django21: InterpreterNotFound: python3.4
  py35-django111: commands succeeded
  py35-django20: commands succeeded
  py35-django21: commands succeeded
  py36-django111: commands succeeded
  py36-django20: commands succeeded
  py36-django21: commands succeeded
ERROR:  py37-django111: InterpreterNotFound: python3.7
ERROR:  py37-django20: InterpreterNotFound: python3.7
ERROR:  py37-django21: InterpreterNotFound: python3.7

No pude encontrar ningún informe sobre cómo resolver este problema y he visto diferentes proyectos de paquetes de Django en CircleCI, sin embargo, difieren en sus enfoques para construir los entornos.

Mi archivo circle.yml:

version: 2

jobs:
  development:
    docker:
      - image: circleci/python:3.6.8

    steps:
      - checkout
      - run:
          name: Install
          command: |
            poetry install
      - run:
         name: Lint
         command: |
            poetry run flake8 django_package
      - run:
          name: Test
          command: |
            poetry run tox
      - run:
         name: Codecov
         command: |
            poetry run codecov

  deployment:
      docker:
        - image: circleci/python:3.6.8

      steps:
        - checkout
        - run:
            name: Publish
            command: |
              poetry publish --build --username "${PYPI_USERNAME}" --password "${PYPI_PASSWORD}" --no-interaction

workflows:
  version: 2

  development-workflow:
    jobs:
      - development

  deployment-workflow:
    jobs:
      - development:
          filters:
            tags:
              only: /v[0-9]+(\.[0-9]+)*/
            branches:
              ignore: /.*/
      - deployment:
          requires:
            - development
          filters:
              tags:
                only: /v[0-9]+(\.[0-9]+)*/
              branches:
                ignore: /.*/

Mi archivo tox.ini:

[tox]
skipsdist = True
envlist =
  {py27}-django{111}
  {py34,py35,py36,py37}-django{111,20,21}

[testenv]
whitelist_externals = poetry
skip_install = true
commands =
    poetry run coverage run --branch runtests.py tests

deps =
  django111: Django>=1.11,<2.0
  django20: Django>=2.0,<2.1
  django21: Django>=2.1

Mi archivo pyproject.toml:

[tool.poetry.dependencies]
python = "*"
django = "*"

[tool.poetry.dev-dependencies]
coverage = "^4.5"
codecov = "^2.0"
flake8 = "^3.7"
tox = "^3.7"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
2

Descubrí que para ejecutar Python 3.4 y 3.7 en CircleCI usando Tox, uno debe agregar py340 y py370 en lugar de py34 y py37. ¡Imagínate!

0