pip を RaspberryPi にインストール。
今までなんとなくインストールしてきたが、RasbperryPi OS と Raspbian と Ubuntu の独自パッケージ / Python2 と 3 / pip と pip3 の事情を踏まえて、結局どうするのが良かったんだっけ?
環境
- Raspberry Pi 3
- Raspberry Pi OS Lite
- Release date: February 21st 2023
- System: 32-bit
Python のバージョン
$ python --version
Python 3.9.2
pip はデフォルトではインストールされていない
今どきは pip は python に標準でついてくるらしいのだけれど Ubuntu 上では入っていないらしい。
$ python -m pip -V
/usr/bin/python: No module named pip
pip のインストール
MS-Windows などでの環境では get-pip.py を使ってインストールするらしいのだけれど、
RaspberryPi OS や Ubuntu などでは OS ディストリビューションパッケージのものを使うのが良さそう。
理由はアップデートに齟齬が生じるというらしいのだが・・・うん? OS ディストリビューションパッケージで提供されるPython モジュールと pip でインストールされる Python モジュールの話 ? それは pip の由来とは関係なさそうな気が・・・
上記の点とは別に、 get-pip.py を使っての pip と OS ディストリビューションパッケージで提供される pip の違いもある。
通常の pip はユーザレベルで動かして python モジュールはユーザーローカルにインストールされるが、OS ディストリビューションパッケージで提供される pip でインストールした python モジュールはシステムにインストールされる。
だから、python の本来のやり方の pip の操作とは違い、 OS ディストリビューションパッケージで提供される pip がらみは操作が微妙に違うことを意識しておかないといけない。
2024/7/6 追記:
記事を書いたときにはあまりよく把握できていなかったのですが、その後見つけた資料で
Debian 系の PIP のカスタマイズについての説明がありました。
「Ubuntuにpipコマンドがない | インストール方法や注意点を解説します | Pythonマニア」
https://pythonmaniac.com/ubuntu-pip/
OS ディストリビューションパッケージの pip は、ユーザ権限で実行するときに -user オプションが自動で付く用にカスタマイズされているらしいですね。
上記を踏まえ、OSディストリビューションに付属の pip を使うときは、特に指定をしなければ sudo 権限を付けてシステムにインストールするという使い方になります。
pip を RaspberryPi OS パッケージからインストール
$ sudo apt install pip
とすると
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'python3-pip' instead of 'pip'
.
.
.
python3-pip をインストールしてくれる。
バージョン
$ pip -V
pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)
pip3 との関係
上記で pip3 が使えるようになる。
$ pip3 -V
pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)
一見同じように見えるが
$ which pip pip3
/usr/bin/pip
/usr/bin/pip3
リンクなどではなく、微妙に違っている
$ ls -alh /usr/bin/pip*
-rwxr-xr-x 1 root root 941 Jul 13 2022 /usr/bin/pip
-rwxr-xr-x 1 root root 943 Jul 13 2022 /usr/bin/pip3
違いの内訳は?
$ diff /usr/bin/pip /usr/bin/pip3
2c2
< # EASY-INSTALL-ENTRY-SCRIPT: 'pip==20.3.4','console_scripts','pip'
---
> # EASY-INSTALL-ENTRY-SCRIPT: 'pip==20.3.4','console_scripts','pip3'
33c33
< sys.exit(load_entry_point('pip==20.3.4', 'console_scripts', 'pip')())
---
> sys.exit(load_entry_point('pip==20.3.4', 'console_scripts', 'pip3')())
中身は同じっぽいですね。
RaspberryPi OS 付属の pip を削除
もし削除する場合は
$ sudo apt remove pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'python3-pip' instead of 'pip'
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
これだとダメで、以下のようにしないといけなかった
$ sudo apt remove python3-pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
python-pip-whl python3-wheel
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
python3-pip
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 1,274 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 47624 files and directories currently installed.)
Removing python3-pip (20.3.4-4+rpt1+deb11u1) ...
Processing triggers for man-db (2.9.4-2) ...