isort — Como corrigir RuntimeError: a configuração do Poetry é inválida

Feb 07 2023
Corrigindo o erro de poesia relacionado ao lançamento recente do pacote isort
Se seus ganchos de pré-commit estão falhando devido a um problema de poesia e isort, você não está sozinho. Nos últimos dias, as pessoas começaram a reclamar de um erro em seus ganchos de pré-confirmação ao tentar instalar o isort via Poesia: Por que vemos este erro: A história completa Versão v1.
Foto de Daniel K Cheung no Unsplash

Se seus ganchos de pré-confirmação estão falhando devido a um poetryproblema isort, você não está sozinho. Nos últimos dias, as pessoas começaram a reclamar de um erro em seus ganchos de pré-confirmação ao tentar instalar isortvia poetry:

[INFO] Installing environment for https://github.com/pycqa/isort.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
An unexpected error has occurred: CalledProcessError: command: ('/builds/.../.cache/pre-commit/repo0_h0f938/py_env-python3.8/bin/python', '-mpip', 'install', '.')
return code: 1
expected return code: 0
[...]
stderr:
      ERROR: Command errored out with exit status 1:
[...]
        File "/tmp/pip-build-env-_3j1398p/overlay/lib/python3.8/site-packages/poetry/core/masonry/api.py", line 40, in prepare_metadata_for_build_wheel
          poetry = Factory().create_poetry(Path(".").resolve(), with_groups=False)
        File "/tmp/pip-build-env-_3j1398p/overlay/lib/python3.8/site-packages/poetry/core/factory.py", line 57, in create_poetry
          raise RuntimeError("The Poetry configuration is invalid:\n" + message)
      RuntimeError: The Poetry configuration is invalid:
        - [extras.pipfile_deprecated_finder.2] 'pip-shims<=0.3.4' does not match '^[a-zA-Z-_.0-9]+$'

Por que vemos este erro: A história completa

A versão v1.5.0introduziu poetry-corealgumas validações adicionais, o que significa que todas as dependências especificadas no pyproject.tomlarquivo em [tool.poetry.extras], também devem ser especificadas na seção de dependências principais [tool.poetry.dependencies].

Após esta poetryversão, isortas instalações da fonte começaram a falhar, pois um pyproject.tomlarquivo mais antigo isortestava especificando pip-shimsa biblioteca na extrasseção, mas não em tool.poetry.dependencies. Como isortnão especificou explicitamente um pin para poetry-core, ele automaticamente pegou o novo lançamento de poesia que era incompatível com o arquivo isortde pyproject.toml.

% pip install --no-binary :all: -U isort
DEPRECATION: --no-binary currently disables reading from the cache of locally built wheels. In the future --no-binary will not influence the wheel cache. pip 23.1 will enforce this behaviour change. A possible replacement is to use the --no-cache-dir option. You can use the flag --use-feature=no-binary-enable-wheel-cache to test the upcoming behaviour. Discussion can be found at https://github.com/pypa/pip/issues/11453
Collecting isort
  Downloading isort-5.11.4.tar.gz (187 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 187.2/187.2 kB 3.7 MB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Preparing metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [14 lines of output]
      Traceback (most recent call last):
        File "/Users/msmith/.venv/bw-310/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 351, in <module>
          main()
        File "/Users/msmith/.venv/bw-310/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 333, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/Users/msmith/.venv/bw-310/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 152, in prepare_metadata_for_build_wheel
          return hook(metadata_directory, config_settings)
        File "/private/var/folders/2t/th8vxc813_gcch7lkh1sbbmc0000gp/T/pip-build-env-cq_z9ahi/overlay/lib/python3.10/site-packages/poetry/core/masonry/api.py", line 40, in prepare_metadata_for_build_wheel
          poetry = Factory().create_poetry(Path(".").resolve(), with_groups=False)
        File "/private/var/folders/2t/th8vxc813_gcch7lkh1sbbmc0000gp/T/pip-build-env-cq_z9ahi/overlay/lib/python3.10/site-packages/poetry/core/factory.py", line 57, in create_poetry
          raise RuntimeError("The Poetry configuration is invalid:\n" + message)
      RuntimeError: The Poetry configuration is invalid:
        - [extras.pipfile_deprecated_finder.2] 'pip-shims<=0.3.4' does not match '^[a-zA-Z-_.0-9]+$'

Como corrigi-lo

Para corrigir o problema, tudo o que você precisa fazer é atualizar isortpara a versão v5.12.0que contém a correção que discutimos na seção anterior.

Observe, no entanto, que a versão v5.12.0de isortabandonou o suporte para Python 3.7 , uma vez que seu EOL (End Of Life) está se aproximando . Portanto, se por algum motivo você ainda precisar usar o Python 3.7, em vez de atualizar para v5.12.0você, instale uma versão v5.11.5que inclua um hotfix para esse problema.

Pensamentos finais

Concluindo, o erro recente nos ganchos de pré-confirmação ao tentar instalar isortvia poesia é resultado de um novo poetry-corelançamento com validações adicionais, causando uma incompatibilidade com o arquivo pyproject.toml antigo de isort. O problema pode ser corrigido atualizando para a versão isort v5.12.0ou, se ainda estiver usando o Python 3.7, instalando a versão v5.11.5que inclui um hotfix para esse problema.

Torne-se um membro e leia todas as histórias no Medium. Sua taxa de adesão apoia diretamente a mim e a outros escritores que você lê. Você também terá acesso total a todas as histórias no Medium.

Artigos relacionados que você também pode gostar

Codificação de nível

Obrigado por fazer parte da nossa comunidade! Antes de você ir:

  • Bata palmas para a história e siga o autor
  • Veja mais conteúdo na publicação Level Up Coding
  • Siga-nos: Twitter | Linkedin | Boletim de Notícias