【私用】ubuntu24.04でpipしてもライブラリインストールできずPEP668になる件

# 概要
ubuntu 24.04で，ターミナルからpipを利用してライブラリをインストールしようとするとエラーになる．

* ubuntu 24.04
* Python: 3.12.3

~~~:エラー
> pip3 install --user numpy
---
error: externally-managed-environment
　︙
hint: See PEP 668 for the detailed specification.
~~~
エラー発生:scream::scream::scream:

解決方法：仮想環境を作成が推奨らしい

:::note
手順 : **ホームディレクトリで実行**
1. sudo apt install python3-venv
1. python3 -m venv .python3_venv
1. source .python3_venv/bin/activate
:::


# 1. pipでライブラリをインストールできない

2024年これはubuntu LTSが公開される年．ということで，ubuntu 24.04をインストール．Pythonの環境を整えるために，いつものように，numpyをインストール．pip3 install --user numpyを実行．ここで，エラー発生:scream::scream::scream:



~~~: PEP 668
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.
    
    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.
    
    See /usr/share/doc/python3.12/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
~~~

DeepLでそのまま翻訳してみた．
~~~
エラー: 外部管理環境

× この環境は外部で管理されています
╰─> Pythonパッケージをシステム全体にインストールするには、apt install
    python3-xyz、xyzはインストールしようとしているパッケージです。
    をインストールします。
    
    Debianパッケージ以外のPythonパッケージをインストールしたい場合、
    python3 -m venv path/to/venv を使って仮想環境を作ります。
    そしてpath/to/venv/bin/pythonとpath/to/venv/bin/pipを使います。そして
    python3-fullがインストールされていることを確認してください。
    
    Debian以外のパッケージのPythonアプリケーションをインストールしたい場合は、
    pipx install xyz を使うのが一番簡単でしょう。仮想環境を管理してくれます。
    pipx がインストールされていることを確認してください。
    
    詳細は /usr/share/doc/python3.12/README.venv を参照してください。

note: もしこれが間違いだと思うなら、PythonのインストールやOSの配布元に連絡してください。Python のインストールや OS を壊す危険を冒してでも、 --break-system-packages を渡すことでこれを上書きすることができます。
hint: 詳細な仕様は PEP 668 を参照してください。
~~~
どうも今までのようにpipでライブラリをインストールするには仮想環境が必要らしい．pipxや--break-system-packagesは使わない方針にした．



# 2. venvの方法を使ってみた
エラーメッセージに従い，仮想環境を作成する方向で作業することにした．

~~~: エラーメッセージの一部
Debianパッケージ以外のPythonパッケージをインストールしたい場合、
    python3 -m venv path/to/venv を使って仮想環境を作ります。
~~~

解決の手順

:::note
**ホームディレクトリで実行**
1. sudo apt install python3-venv
1. python3 -m venv .python3_venv
1. source .python3_venv/bin/activate
:::


**1. sudo apt install python3-venv**

Python3の仮想環境を作るモジュールらしい．これがないと次のコマンドが実行できない．メッセージによると ```python3-full```パッケージをインストールする必要があると書かれているが，利用するのは```python3-venv```で大丈夫そう．

**2. python3 -m venv .python3_venv**

メッセージに記述の ```python3 -m venv path/to/venv```を実行する．path/to/venv/は仮想環境のディレクトリを作りたい場所を指定すれば良いみたい．今回は，ホームディレクトリ直下の```.python3_venv```ディレクトリを指定してみた．

**3. source .python3_venv/bin/activate**

仮想環境を有効化するためのコマンド．シェルごとに異なるので注意．zshを利用しているので，```bin/activate```を使う．


|シェル|コマンド|
|-----|------|
|zsh |source　\<venv>/bin/activate |
|fish |source 　\<venv>/bin/activate.fish |
|tcsh |source 　\<venv>/bin/activate.csh  |

表の\<venv>は仮想環境作成時に指定したディレクトリ．

source .python3_venv/bin/activateを実行すると，ターミナルのプロンプトが変わります．仮想環境で指定したディレクトリが表示されています．

~~~:ターミナルの表示

(.python3_venv) ~/$

~~~
この状態でpipが使えるようになりました．しかも，pipでpip3と同じになります．
ちゃんとpipもアップデートできます．

~~~:pipアップデート
(.python3_venv) ~/$ pip install -U pip
~~~

ライブラリもインストールできるはず．

~~~:ライブラリインストールしてみた
(.python3_venv) ~/$ pip install numpy

---
Collecting numpy
  Using cached numpy-2.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (60 kB)
Using cached numpy-2.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (19.2 MB)
Installing collected packages: numpy
Successfully installed numpy-2.0.1
~~~
numpyインストールできました!!

# その他
仮想環境を使い分けしたり，複数人でPCを利用しないので，シェル起動時に自動的にPythonの仮想環境が利用できるようにしておく．毎回 ```source .python3_venv/bin/activate```を入力しなくてよいはず．

~~~sh: .zshrcに追記
source $HOME/.python3_venv/bin/activate
~~~


詳細は，PythonのDocumentationに記載されていた!!さすが公式ドキュメント．

https://docs.python.org/ja/3/library/venv.html