poetryでtensorflowをインストールできない・インストールしたのに使えない

概要

poetryでtensorflowをインストールしようとしたら手間取ったのでメモ。

環境

  • OS: windows11
  • python version: 3.10.5

結論

tensorflow-io-gcs-filesystemをバージョン0.31でインストールした後、tensorflowをバージョン2.10でインストール

poetry add tensorflow-io-gcs-filesystem~=0.31.0
poetry add tensorflow~=2.10.0

経緯

poetry add tensorflow できない

poetry add tensorflowでインストールしようとすると、以下のエラーに遭遇。

RuntimeError

  Unable to find installation candidates for tensorflow-io-gcs-filesystem (0.32.0)

このエラーについて、githubにissueが立ってた。

github.com

「先にtensorflow-io-gcs-filesystemを0.31.0でインストールしてからtensorflowをインストールすると上手くいくよ」とのことなので、その通りにすると無事インストールはできた。

poetry add tensorflow-io-gcs-filesystem==0.31.0
poetry add tensorflow

インストールしたのに No module named 'tensorflow'

インストールできました。めでたしめでたし…。

と思いきや以下のエラーが。

import tensorflow as tf
ModuleNotFoundError: No module named 'tensorflow'

インストールしたはずなのに「モジュールないよ!」エラーが出ています。

pyproject.tomlにtensorflowが追加されているから正常にインストールはできたはず。

本プロジェクトの仮想環境を参照できていることも確認した。

あれ…?

と思って.venv/Lib/site-packageを覗いてみると、tensorflowディレクトリが見当たらない。 tensorflowの周辺ライブラリはインストールされているのに。

ググってみたところこちらもissueが立ってまして、どうもメタデータ関連で問題が起きているようです。

github.com

stackoverflow.com

tensorflowの現在の最新バージョンは2.12ですが、2.10であればpoetryで問題なく動くみたいなので改めてバージョン指定してインストール。

poetry add tensorflow-io-gcs-filesystem~=0.31.0
poetry add tensorflow~=2.10.0

これで無事動くようになりました。バージョンは最新のものよりちょっと古いですが…。

プラットフォームに基づく異なるホイール間のメタデータの不一致に起因する…などと書いてあるので、windows以外のosであればpoetryでも正常に最新バージョンがインストールできるのかもしれないです。

余談

ちゃんとパッケージ管理したいのでpyenv+poetry構成にしてますが、pyenv+poetryの環境構築も面倒だしos依存もあるとなると、もうdocker使った方がマシなのかな…。

ただ、pyinstallerで実行ファイル化したいときも多々あり、そうなったときdockerのlinux上でやってるとwindows用にexe化できないのが難点かな?

あと、fastapiでサーバー建てるときport通したりしなきゃいけないのもちょっと面倒かな…。