amagaeru blog

エラー:poetryでkedro installするときpythonバージョンが合わなかった

はじめに

poetryを使って、kedroをインストールしようとした時に発生したエラーの内容と対応です。

概要

  • pyenvでpythonバージョン3.8.5指定
  • その後、poetryでkedroインストールしたところ、kedro要求のpythonバージョンでないとしてエラー発生
  • poetryが作成したpyproject.tomlを次のように修正したところインストール成功

実行環境とエラー発生までの流れ

  • pyenv 1.2.20
  • poetry version 1.1.4

pythonバージョン設定

$ pyenv local 3.8.5

pyproject.tomlの中身

[tool.poetry]
name = "trymlflow"
version = "0.1.0"
description = ""
authors = ["amagaeru"]

[tool.poetry.dependencies]
python = "^3.8"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

一旦$ poetry installした後、kedro追加$ poetry add kedro

エラー発生

 SolverProblemError

  The current project's Python requirement (>=3.8,<4.0) is not compatible with some of the required packages Python requirement:
    - kedro requires Python >=3.6, <3.9, so it will not be satisfied for Python >=3.9,<4.0
  
  Because no versions of kedro match >0.16.6,<0.17.0
   and kedro (0.16.6) requires Python >=3.6, <3.9, kedro is forbidden.
  So, because use-toml depends on kedro (^0.16.6), version solving failed.

  at ~/.poetry/lib/poetry/puzzle/solver.py:241 in _solve
      237│             packages = result.packages
      238│         except OverrideNeeded as e:
      239│             return self.solve_in_compatibility_mode(e.overrides, use_latest=use_latest)
      240│         except SolveFailure as e:
    → 241│             raise SolverProblemError(e)
      242│ 
      243│         results = dict(
      244│             depth_first_search(
      245│                 PackageNode(self._package, packages), aggregate_package_nodes

  • Check your dependencies Python requirement: The Python requirement can be specified via the `python` or `markers` properties
    
    For kedro, a possible solution would be to set the `python` property to ">=3.8,<3.9"

    https://python-poetry.org/docs/dependency-specification/#python-restricted-dependencies,
    https://python-poetry.org/docs/dependency-specification/#using-environment-markers

pythonのバージョンがkedro要求に沿ってない?

kedro (0.16.6) requires Python >=3.6, <3.9

しかし、pythonバージョンは3.8.5のはず。

$ python --version
Python 3.8.5

エラーログをよく読むと、poetryのpythonプロパティを ">=3.8, <3.9" に設定することで解決する可能性があるとの記載を発見したのでこれを試す。

For kedro, a possible solution would be to set the `python` property to ">=3.8,<3.9"

pyproject.tomlのpythonプロパティの部分を下記のように修正したところ、無事インストール完了。

python = ">=3.8,<3.9"

おわりに

ログを良く読めと言うのは聞く言葉ですが、まさにその通りのエラーでした。 すぐにググってしまい、5分少々ネットサーフィンしたのはここだけの話です。