この記事ではDebian 12にPythonをインストールし、コマンドのようにどこでも使うPythonパッケージをインストールする方法について記述する。
コマンドと解説
# Python本体とpipxをインストールする sudo apt install python-is-python3 pipx # パスを通す pipx ensurepath # 無事にインストールできたか確認 python -V # 目的のPythonパッケージをインストール pipx install ${PythonPackageName}
python-is-python3
はpythonを一々python3
とタイプすることなく、python
でも起動できるようにするパッケージである。
普通にPythonパッケージをaptからインストールすると、デフォルトでpython3
でしか起動できない。
自分でシンボリックリンクやエイリアスを設定してもよいが、既存パッケージがあるので活用する。
さらに、同パッケージは依存パッケージとしてpython
が設定されているから、Python本体のインストールも行われる。
pipx
はPython環境の隔離機能付きのパッケージマネージャーだと思えばいい。
詳細は公式のドキュメントを参照せよ。
わざわざ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などを使えばよい。