Ubuntu20.04にGemini APIをインストールする

# はじめに
　Oracle VirtualBox上のUbuntu22.04では、公式のGemini API クイックスタートの手順通りにGemini APIを使用できたが、実機に入っているUbuntu20.04ではエラーが出て実行できなかった。この記事では、仮想環境を使用せず、Ubuntu20.04のデフォルトのPythonバージョンを変更する方法で説明する。

:::note warn
この方法を実行すると、異なるPythonバージョンが混在することになり、他の実行環境に影響を与える場合があるのでご注意ください。仮想環境の使用を推奨します。
:::

## 実行環境
 - Ubuntu 20.04 LTS (インストール直後の状態)

# エラーが発生した実行内容
以下の記事を参考にして、google-generativeaiをインストールし、API Keyをエクスポートした後に、test.pyを作成・実行した。

https://qiita.com/nobhri/items/ed15580fe87386440933

https://ai.google.dev/gemini-api/docs/quickstart?lang=python

```test.py
import google.generativeai as genai

genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))

model = genai.GenerativeModel('gemini-pro')
response = model.generate_content("Explain how AI works")
print(response.text)
```
実行したコマンド
```
$ pip install google-generativeai
$ export GOOGLE_API_KEY="My_API_Key"
$ python3 test.py
```
エラーメッセージ
```
$ python3 test.py
~省略~
AttributeError: module 'google.generativeai' has no attribute 'GenerativeModel'
```
# 原因
　Pythonのバージョンとpipのバージョンが、google-generativeaiと互換性を持たないことが原因のようだ。google-generativeaiは推奨されるバージョンがPython3.9～3.11である。（一応Python3.8でも動くって書いてあるけど...）

https://pypi.org/project/google-generativeai/

しかし、Ubuntu20.04のPythonはデフォルトがPython3.8らしい。

https://wiki.ubuntu.com/FocalFossa/ReleaseNotes#Python3_by_default

この状態でgoogle-generativeaiをインストールしても、現時点で最新版の0.8.3ではなく初期版の0.1.0rc1がインストールされてしまう。

```
$ pip list | grep google-generativeai

google-generativeai        0.1.0rc1
```

初期版は'GenerativeModel'には対応していないようなので、Pythonとpipのバージョンを上げる必要がある。

# 解決方法
1\. すでにインストールされているgoogle-generativeai関連パッケージとpipをアンインストールする。

```
$ python3 -m pip uninstall google-ai-generativelanguage google-generativeai protobuf grpcio-status
$ python3 -m pip uninstall pip
```

2\. Python3.10をインストールし、デフォルトのPythonバージョンに変更する。

```
$ sudo apt update
$ sudo apt install software-properties-common
```

以下でRepositoryを登録する。追加で登録するか聞かれるが、Enterで続行してOK。

```
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt install python3.10
$ reboot
```
ここで、インストールされているpythonを確認する。
```
$ ls /usr/bin/ | grep python
dh_python2
glade2script-python3
python2
python2.7
python3
python3-config
python3-futurize
python3-pasteurize
python3.10
python3.8
python3.8-config
x86_64-linux-gnu-python3-config
x86_64-linux-gnu-python3.8-config
```
2つのバージョンのpythonをupdate-alternativeの登録し、デフォルトをpython3.10に手動で設定する。

```
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1
update-alternatives: /usr/bin/python (python) を提供するために自動モードで /usr/bin/python3.10 を使います

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2
update-alternatives: /usr/bin/python (python) を提供するために自動モードで /usr/bin/python3.8 を使います

$ sudo update-alternatives --config python
alternative python (/usr/bin/python を提供) には 2 個の選択肢があります。

  選択肢    パス               優先度  状態
------------------------------------------------------------
* 0            /usr/bin/python3.8    2         自動モード
  1            /usr/bin/python3.10   1         手動モード
  2            /usr/bin/python3.8    2         手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 1
update-alternatives: /usr/bin/python (python) を提供するためにマニュアルモードで /usr/bin/python3.10 を使います
```

これで、デフォルトがpython3.10に設定できた！

```
$ python --version
Python 3.10.16
```

https://zenn.dev/hovinci/articles/499cb856a7affc

https://qiita.com/piyo_parfait/items/5abbe4bee2495a62acdc


3\. Python3.10用のpipを再インストールする。

```
$ reboot
$ sudo apt update

#pipを入れ直す
$ sudo apt remove python3-pip
$ curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python
Collecting pip
  Using cached pip-24.3.1-py3-none-any.whl.metadata (3.7 kB)
Using cached pip-24.3.1-py3-none-any.whl (1.8 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 24.3.1
    Uninstalling pip-24.3.1:
      Successfully uninstalled pip-24.3.1
Successfully installed pip-24.3.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.

$ pip3 -V
pip 24.3.1 from /usr/local/lib/python3.10/dist-packages/pip (python 3.10)
```



4\. google-generativeaiをインストールする。

```
$ pip install google-generativeai
```

最後に、google-generativeaiのバージョンが最新であればOK

```
$ pip list | grep google-generativeai

google-generativeai        0.8.3
```
これでUbuntu上でGeminiが使えて幸せになれます！