CLOVER🍀

That was when it all began.

Ubuntu Linux 22.04 LTSで、"python"コマンドがないと言われたら

これは、なにをしたくて書いたもの?

Ubuntu Linux 20.04 LTSからUbuntu Linux 22.04 LTSへ環境を移していて、pythonコマンドの扱いにちょっと困ったのでメモ。

環境

今回の環境はこちら。Ubuntu Linux 22.04 LTSです。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy


$ uname -srvmpio
Linux 5.15.0-60-generic #66-Ubuntu SMP Fri Jan 20 14:29:49 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

起こったこと

自分で作ったプログラム等なら困らないのですが、ダウンロードしたりして使うソフトウェアにpythonコマンドを期待したものがいたり
すると、こんな感じのエラーを踏むことになります。

/usr/bin/env: `python': そのようなファイルやディレクトリはありません


/usr/bin/env: ‘python’: No such file or directory

Ubunu Linux 20.04 LTSの時点で、Python 2は削除に向かっていたからのようですね。

Python2 removal for focal ...

Ubuntu 20.04 その11 - Ubuntu 20.04 LTSにおけるPython2の削除方針と対応方針 - kledgeb

解法としてはPython 3にpythonコマンドを割り当てたいのですが、さてどうしましょう?と。

python-is-python3パッケージ

Python 3のパッケージでインストールされるのはpython3コマンドなので、pythonコマンドとしてシンボリックリンクでも貼れば
いいのかなと思ったのですが、それを行うpython-is-python3というパッケージがあるようです。

Ubuntu – Details of package python-is-python3 in jammy

こちらの記事でも紹介されていますが

Ubuntu 20.04 その11 - Ubuntu 20.04 LTSにおけるPython2の削除方針と対応方針 - kledgeb

pythonコマンドを呼び出そうとすると、そもそもパッケージを提案されます。

$ python
コマンド 'python' が見つかりません。もしかして:
  command 'python3' from deb python3
  command 'python' from deb python-is-python3

パッケージの情報。

$ apt show python-is-python3
Package: python-is-python3
Version: 3.9.2-2
Priority: optional
Section: python
Source: what-is-python (10)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Matthias Klose  <doko@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 13.3 kB
Depends: python3
Breaks: python, python-is-python2, python-is-python2-but-deprecated, python-minimal
Replaces: python, python-is-python2, python-is-python2-but-deprecated, python-minimal
Cnf-Ignore-Commands: python
Download-Size: 2,788 B
APT-Sources: https://mirrors.edge.kernel.org/ubuntu jammy/main amd64 Packages
Description: symlinks /usr/bin/python to python3
 Starting with the Debian 11 (bullseye) and Ubuntu 20.04 LTS (focal)
 releases, all python packages use explicit python3 or python2
 interpreter and do not use unversioned /usr/bin/python at all. Some
 third-party code is now predominantly python3 based, yet may use
 /usr/bin/python.
 .
 This is a convenience package which ships a symlink to point
 the /usr/bin/python interpreter at the current default python3. It may
 improve compatibility with other modern systems, whilst breaking some
 obsolete or 3rd-party software.
 .
 No packages may declare dependencies on this package.

python3から/usr/bin/pythonへのシンボリックリンクですね。

symlinks /usr/bin/python to python3

Debian 11(bullseye)およびUbuntu Linux 20.04 LTS(focal)から、/usr/bin/pythonを使用しなくなっているようなのですが。

python-is-python3パッケージをインストールすることで、/usr/bin/pythonへシンボリックリンクを貼ることができ、/usr/bin/pythonを
期待するアプリケーションを動かすことができるようになります。
もっとも、使われるのはPython 3なので、Python 2を期待されているようだとまた話が変わりますが。

というわけで、python-is-python3をインストールしてみましょう。

まずは現時点でのPython 3のバージョンを確認。

$ python3 -V
Python 3.10.6

python-is-python3をインストール。

$ sudo apt install python-is-python3

pythonコマンドが使えるようになりました。

$ python -V
Python 3.10.6

確かに、pythonコマンドからpython3コマンドへシンボリックリンクが貼られています。

$ ll /usr/bin/python
lrwxrwxrwx 1 root root 7 10月 11  2021 /usr/bin/python -> python3*

含まれているファイルも、本当にシンボリックリンクくらいですね。

$ dpkg -L python-is-python3
/.
/usr
/usr/bin
/usr/share
/usr/share/doc
/usr/share/doc/python-is-python3
/usr/share/doc/python-is-python3/changelog.gz
/usr/share/doc/python-is-python3/copyright
/usr/share/man
/usr/share/man/man1
/usr/bin/python
/usr/share/man/man1/python.1.gz