これは、なにをしたくて書いたもの?
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は削除に向かっていたからのようですね。
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