Python アプリケーションのインストール:venv と pipx の利用

このページでは,Python アプリケーションパッケージをインストールする仮想環境を構築する方法を勉強しました.
Debian での推奨順位は,(1) Debian パッケージをインストール (2) venv コマンドで仮想環境を構築し,そのなかで pip コマンドでインストール (3) pipx コマンドを使い,既存の仮想環境である $HOME/.local にインストール というものでした.
Debian では,venv は python3-venv パッケージ(python3 パッケージと同時にインストールされます)に,pipx は pipx パッケージに入っています.

これらの方法は,一般ユーザーで pip コマンドを利用したときのエラーメッセージと,メッセージ内に記されている,
/usr/share/doc/python3.11/README.venv
に記されています.

インフォメーション

目次(ページ内リンク)


パッケージのインストール
venv を使ったインストール
pipx を使ったインストール

参考にしたページ


Python パッケージユーザーガイド:いろいろな方法が紹介されています
PyPI · The Python Package Index:Python パッケージのレポジトリです.パッケージを検索できます
pipx

パッケージのインストール

これまでにインストールした Debian パッケージ

下は,筆者がインストールした Debian パッケージです.これらはそのまま(仮想環境を使わずに)利用できます.

シェル

Python シェルを使うには,端末に
$ python3
と入力します. Python シェルを終了するには,
>>> quit() または exit()
と入力します.

IPython シェルを使うには,端末に
$ ipython3
と入力します.
IPython シェルを終了するには,
In [1]: quit() または exit()
と入力します.

pip 使用時のエラーメッセージ

一般ユーザー権限で,Debian でパッケージ化されていない Python アプリケーションパッケージを,pip を使ってインストールしようとするとエラーになります.
エラーメッセージは,"error: externally-managed-environment" 云々です.
おそらく下のようなことがが原因なのでしょう.であれば,Unix 系 OS 一般で同じような状況であると思います.

下が,エラーメッセージ全体です.

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.
    (注.Debian パッケージがあれば,それをインストールせよ)
    
    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.
    (注.Debian でパッケージされていない Python パッケージをインストールするには,venv で仮想環境を作成してそこにインストールせよ)
    
    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.
    (注.Debian でパッケージされていない Python アプリケーションをインストールするには,pipx で仮想環境を管理してそこにインストールせよ)
    
    See /usr/share/doc/python3.11/README.venv for more information.
    (注.詳しくは README.venv を参照せよ)

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.

インストールの方針

とりあえず,上のエラーメッセージを方針とします.
確認しておくと,

  1. Debian(一般化して,OS のディストリビューション)でパッケージ化されているものを使う
  2. venv を使ったインストールを試す
  3. pipx を使ったインストールを試す

venv を使ったインストールは,Python stdlib モジュールを使い,ホームディレクトリに Python の仮想実行環境を作成する方法です.
pipx を使ったインストールは, Python アプリケーションを,ホームディレクトリに既存の .local ディレクトリにインストールするという方法です.

Python パッケージユーザーガイドには他の選択肢も紹介されています.
また,README.venv には,"EXTERNALLY-MANAGED" を回避する方法も記されています.
それらは,必要に応じて検討します.


venv を使ったインストール

venv コマンドで仮想環境を構築し,そのなかで pip コマンドでインストールするという方法です.
このままだと,二択を迫られるような気が….

仮想環境の構築

Python パッケージユーザーガイドの pip と venv を使って仮想環境にパッケージをインストールするに記されている方法を利用しました.
ホームディレクトリで
~$ python3 -m venv .venv
としたら,.venv というディレクトリが作成されました.
~$ ls .venv
として内容を表示すると,
 bin
 include
 lib
 lib64
 pyvenv.cfg
が作成されていました.

.venv への Python パッケージのインストール

ユーザーガイドによると,上で作成した仮想環境は,
活性化 → 作業 → 非活性化
という流れで利用するとのことです.

例として,冒頭で挫折した PubChemPy という Python パッケージをインストールしたときの手順を下に示します.

まず活性化です.これによりプロンプトに "(.venv)" が付け加わります.
~$ source ~/.venv/bin/activate

続いて pip コマンドを使ってパッケージをインストールします.
(.venv) ~$ pip install pubchempy

作業が終わったので非活性化します.これによりプロンプトが元に戻ります.
(.venv) ~$ deactivate
~$

探してみたら,本体は,
.venv/lib/python3.11/site-packages/pubchempy.py
にインストールされていました.

.venv での Python スクリプトの利用

上でインストールした pubchempy を使う際にはまず活性化が必要で,使い終わったら非活性化が必要です.
試しに,pubchempy を使う自作 Python スクリプト aa.py をカレントディレクトリに作成し,
~$ source ~/.venv/bin/activate
(.venv) ~$ python3 ./aa.py
(.venv) ~$ deactivate
としたら,動作しました.

これまでにインストールした Python パッケージ


pipx を使ったインストール

pipx コマンドを使い,既存の仮想環境である $HOME/.local にインストール という方法です.
私の場合,$HOME/.local ディレクトリには,キーリング,デスクトップの設定,メールなどが入っています.
うっかり $HOME/./local を削除すると面倒なことになるので要注意です.

pipx のインストール

Debian パッケージを
~$ sudo apt-get install pipx
としてインストールし,その後で,
~$ pipx ensurepath
としたら,下のメッセージが表示されました.

/home/***/.local/bin has been been added to PATH, but you need to open a new terminal or re-login for this PATH change to take effect.
You will need to open a new terminal or re-login for the PATH changes to take effect.
Otherwise pipx is ready to go! ✨ 🌟 ✨

PATH が追加されたとのことです.
.bash を見ると,下の 2 行が追加されていました.

# Created by `pipx` on 2023-12-22 07:18:17
export PATH="$PATH:/home/***/.local/bin"

追加された設定を有効化しておきます.
~$ source ~/.bashrc

Getting Started

pipx のサイトにある Getting Started に,いくつかのコマンドが紹介されているのでそれを引用します.

動作確認 その1

ここでも,冒頭で挫折したアプリケーションを試してみました.
~$ pipx install PubChemPy
としたら,エラーメッセージが表示されてインストールできませんでした.

PubChemPy は PyPI · The Python Package Index や pypisearch で探したら見つかります.
ならば,ということで,PubChemPy のサイトから pubchempy-1-0-4-tar-gz をダウンロードして,
~$ pipx install pubchempy-1-0-4-tar-gz
としたのですが,エラーになりました.
今回のエラーメッセージでは,pip の出力が "/.local/pipx/logs/cmd_2023-12-24_07.54.25_pip_errors.log" に記されていると出ました.
そのログファイルは下の内容です.インストールできない原因はバージョンの不適合のようです.

PIP STDOUT
----------

PIP STDERR
----------
ERROR: Could not find a version that satisfies the requirement pubchempy-1-0-4-t
ar-gz (from versions: none)
ERROR: No matching distribution found for pubchempy-1-0-4-tar-gz

動作確認 その2

目的のパッケージがインストールできなかったので,pipx のサイトに記されている例を試してみました.
~$ pipx install pycowsay

  installed package pycowsay 0.0.0.2, installed using Python 3.11.2
  These apps are now globally available
    - pycowsay
done! ✨ 🌟 ✨

インストールできたようなので,実行ファイルを探してみたら,
$HOME/.local/pipx/venvs/pycowsay/bin/pycowsay
にインストールされていました.
また,実行ファイルへのシンボリックリンクが,
$HOME/.local/bin/pycowsay
に作成されていました.

実行してみます.
~$ pycowsay

<  >

   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||

アンインストールは,
~$ pipx uninstall pycowsay

uninstalled pycowsay! ✨ 🌟 ✨

これまでにインストールした Python パッケージおよびアプリケーション


参考書の検索