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 パッケージです.これらはそのまま(仮想環境を使わずに)利用できます.
- python3:本体.OS のインストール時にインストールされた,らしい
- pipx:隔離された仮想環境で Python バイナリを実行
- python3-rdkit:ケモインフォマティクス
- rdkit-doc:rdkit のドキュメント
シェル
Python シェルを使うには,端末に
$ python3
と入力します.
Python シェルを終了するには,
>>> quit() または exit()
と入力します.
IPython シェルを使うには,端末に
$ ipython3
と入力します.
IPython シェルを終了するには,
In [1]: quit() または exit()
と入力します.
pip 使用時のエラーメッセージ
一般ユーザー権限で,Debian でパッケージ化されていない Python アプリケーションパッケージを,pip を使ってインストールしようとするとエラーになります.
エラーメッセージは,"error: externally-managed-environment" 云々です.
おそらく下のようなことがが原因なのでしょう.であれば,Unix 系 OS 一般で同じような状況であると思います.
- Debian パッケージの管理外である Python パッケージのインストールを防ぐ仕組みが作成されており,それに従ってエラーメッセージが表示された
- そもそも一般ユーザーには,システム(ここでは /usr/local/ 以下)に書き込む権限がない
下が,エラーメッセージ全体です.
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.
インストールの方針
とりあえず,上のエラーメッセージを方針とします.
確認しておくと,
- Debian(一般化して,OS のディストリビューション)でパッケージ化されているものを使う
- venv を使ったインストールを試す
- pipx を使ったインストールを試す
venv を使ったインストールは,Python stdlib モジュールを使い,ホームディレクトリに Python の仮想実行環境を作成する方法です.
pipx を使ったインストールは, Python アプリケーションを,ホームディレクトリに既存の .local ディレクトリにインストールするという方法です.
Python パッケージユーザーガイドには他の選択肢も紹介されています.
また,README.venv には,"EXTERNALLY-MANAGED" を回避する方法も記されています.
それらは,必要に応じて検討します.
venv を使ったインストール
venv コマンドで仮想環境を構築し,そのなかで pip コマンドでインストールするという方法です.
このままだと,二択を迫られるような気が….
- 必要なPython パッケージをすべて venv 環境にインストールして venv 環境を使う
- venv 環境での作業と本来の環境での作業を使い分ける
仮想環境の構築
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 パッケージ
- PubChemPy
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 に,いくつかのコマンドが紹介されているのでそれを引用します.
- pipx install PACKAGE:Python パッケージのインストール.例えば,pipx install pycowsay
- pipx list:インストールされたプログラムを表示.試したら,パスやバージョンも表示されました
- pipx run pycowsay moooo!:Python パッケージを,インストールしないで実行します.試せば,"moooo!" が何に使われているか判ります
- pipx --help
動作確認 その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 パッケージおよびアプリケーション
- pypisearch:Python パッケージを探すコマンドです
参考書の検索
- Amazon の「コンピュータ・IT」本カテゴリーでの,「python」での検索結果です