dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

Debian12 bookwormにPythonをインストールしてグローバルに使うPythonパッケージをインストールする

この記事ではDebian 12にPythonをインストールし、コマンドのようにどこでも使うPythonパッケージをインストールする方法について記述する。

コマンドと解説

# Python本体とpipxをインストールする
sudo apt install python-is-python3 pipx
# パスを通す
pipx ensurepath
# 無事にインストールできたか確認
python -V

# 目的のPythonパッケージをインストール
pipx install ${PythonPackageName}

python-is-python3pythonを一々python3とタイプすることなく、pythonでも起動できるようにするパッケージである。 普通にPythonパッケージをaptからインストールすると、デフォルトでpython3でしか起動できない。 自分でシンボリックリンクエイリアスを設定してもよいが、既存パッケージがあるので活用する。 さらに、同パッケージは依存パッケージとしてpythonが設定されているから、Python本体のインストールも行われる。

pipxPython環境の隔離機能付きのパッケージマネージャーだと思えばいい。 詳細は公式のドキュメントを参照せよ。 わざわざpipxをインストールする目的はPEP 668の回避にある。

2023-01-30にリリースされたpipバージョン23.0以降、PEP 668に準拠した挙動が実装されている。 同バージョン以降のpipで仮想環境Pythonパッケージをインストールしようとすると、次のようなエラーメッセージが出力される。

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.11/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.

PEP 668は簡単に言うと「グローバルのPythonパッケージと仮想環境内のPythonパッケージが衝突する問題などを避けるため、何らかの仮想環境内以外でpip installを行うな」と主張している。

cf. https://pip.pypa.io/en/stable/news/#v23-0

対応策として、エラーメッセージにもあるようにpipxが推奨されているから、これに従う。

it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.

このために、最初のsudo apt installで一緒にpipxをインストールしている。

なお、開発などプロジェクトでだけ使うパッケージについてはこれまで通りvenvなどを使えばよい。