Anacondaの仮想環境にTensorflowを入れられなかった話

# 問題提起
機械学習の勉強のためにAnacondaにTensorflow用の仮想環境を作ろうとしたらTensorflowをインストールできなかった。

# 実行環境とエラー文
pythonのバージョンは`3.13.0`。
叩いたコマンドは以下の通り。
```bash
conda install tensorflow
```
すると以下のようなエラーが発生した。
```bash
Channels:
 - defaults
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: - warning  libmamba Added empty dependency for problem type SOLVER_RULE_UPDATE
failed

LibMambaUnsatisfiableError: Encountered problems while solving:
  - nothing provides bleach 1.5.0 needed by tensorboard-1.6.0-py27hf484d3e_0

Could not solve for environment specs
The following packages are incompatible
├─ pin-1 is installable and it requires
│  └─ python 3.13.* , which can be installed;
└─ tensorflow is not installable because there are no viable options
   ├─ tensorflow [1.10.0|1.11.0|...|2.1.0] would require
   │  └─ python 2.7.* , which conflicts with any installable versions previously reported;
   ├─ tensorflow [1.10.0|1.9.0] would require
   │  └─ python 3.5.* , which conflicts with any installable versions previously reported;
   ├─ tensorflow [1.10.0|1.11.0|...|2.2.0] would require
   │  └─ python 3.6.* , which conflicts with any installable versions previously reported;
   ├─ tensorflow [1.10.0|1.8.0|1.9.0] would require
   │  └─ tensorflow-base [==1.10.0 gpu_py27h3435052_0|==1.10.0 gpu_py35h3435052_0|...|==1.9.0 gpu_py36h9f529ab_1], which requires
   │     └─ cudatoolkit 8.0.* , which does not exist (perhaps a missing channel);
   ├─ tensorflow [1.13.1|1.14.0|...|2.9.1] would require
   │  └─ python 3.7.* , which conflicts with any installable versions previously reported;
   ├─ tensorflow [1.4.1|1.5.0|1.6.0|1.7.0] would require
   │  ├─ tensorboard [>=1.6.0,<1.7.0 |>=1.7.0,<1.8.0 ] but there are no viable options
   │  │  ├─ tensorboard [1.6.0|1.7.0|1.8.0] would require
   │  │  │  └─ bleach 1.5.0 , which does not exist (perhaps a missing channel);
   │  │  └─ tensorboard [1.6.0|1.7.0] would require
   │  │     └─ bleach >=1.5.0,<1.5.1.0a0 , which does not exist (perhaps a missing channel);
   │  └─ tensorflow-tensorboard [ |>=1.5.0,<1.6.0 ] but there are no viable options
   │     ├─ tensorflow-tensorboard [0.4.0|1.5.1] would require
   │     │  └─ bleach 1.5.0 , which does not exist (perhaps a missing channel);
   │     └─ tensorflow-tensorboard 1.5.1 would require
   │        └─ bleach >=1.5.0,<1.5.1.0a0 , which does not exist (perhaps a missing channel);
   ├─ tensorflow 1.8.0 would require
   │  └─ tensorboard >=1.8.0,<1.9.0 , which cannot be installed (as previously explained);
   ├─ tensorflow [2.10.0|2.11.0|...|2.9.1] would require
   │  └─ python [3.10.* |>=3.10,<3.11.0a0 ], which conflicts with any installable versions previously reported;
   ├─ tensorflow [2.10.0|2.11.0|...|2.9.1] would require
   │  └─ python 3.8.* , which conflicts with any installable versions previously reported;
   ├─ tensorflow [2.10.0|2.11.0|...|2.9.1] would require
   │  └─ python [3.9.* |>=3.9,<3.10.0a0 ], which conflicts with any installable versions previously reported;
   ├─ tensorflow [2.12.0|2.17.0] would require
   │  └─ python [3.11.* |>=3.11,<3.12.0a0 ], which conflicts with any installable versions previously reported;
   └─ tensorflow 2.17.0 would require
      └─ python >=3.12,<3.13.0a0 , which conflicts with any installable versions previously reported.
```
ぱっと見だとバージョンの問題が起きていそう...?

# 解決方法
ChatGPT先生に投げてみた所、以下のような回答がでてきた。
>このエラーは、tensorflow の依存関係や Python バージョンに起因するものです。Anaconda 環境において tensorflow をインストールする際には、指定された Python バージョンと互換性のある TensorFlow バージョンを選択する必要があります。

つまりpythonのバージョンが`3.13.0`のやつに対応するTensorflowのバージョンがなかったということである。先程の仮説は的を得ていたっぽい。このことを踏まえてエラー文をよく読んで見ればTensorflowのバージョンに対応するpythonのバージョンを出力してくれていることが分かる。エラー文偉い。

さて、以上のことを踏まえて仮想環境を作成するところからやり直した。
まずは仮想環境の構築から。
```bash
conda create -n tensorflow_env python=3.9
```
ここでの肝はpythonのバージョンを指定してあげるところ。今回はChatGPTに言われるがままにpythonのバージョンを`3.9.20`で作成したが、Tensorflowがサポートしている`3.12`くらいまでなら大丈夫だと思われる (ココらへんは無駄話) 。Tensorflowがどのpythonのバージョンまでをサポートしているかはドキュメントなどで確認するのが良いだろう。
次にTensorflowをインストールする。
```bash
conda install tensorflow
```
するとTensorflowがインストールされる。実際に`conda list | grep tensorflow`というコマンドを叩いて確認すると
```bash
tensorflow                2.18.0                   pypi_0    pypi
tensorflow-io-gcs-filesystem 0.37.1                   pypi_0    pypi
```
と出力され、確かにTensorflowがインストールされていることが分かる。

これでTensorflowをAnacondaの仮想環境にインストールすることができた。やったね！！

# 最後に
とりあえずなにか問題がおきたらエラー文をみよう。対処方法がわからなくても何が起きているのかくらいは把握しておいたほうが良い。ただChatGPTにまかせるだけよりは良いはずだ。さて、Tensorflowのインストールもできたことだし、私は機械学習の勉強に戻るとしよう。良き機械学習ライフを。

# 追記
2024/11/10: tensorflowをインストールするときに`pip`ではなく`conda`を使うようにした。