Ubuntuにおけるシステムソフトウェアの多くがPythonに依存しています。そのためほとんどのUbuntu関連OSでは、最初からPythonがインストールされているはずです。今回はそんなUbuntuを動かす上で必要な
Ubuntuにおける「システムPython」とは
UbuntuのシステムコンポーネントのいくつかはPythonに依存しています。たとえばサーバー版だけでも、パッケージ管理システムを補助するツールや、netplan.
このような
システムPythonは、Ubuntuのリリースごとに一意のバージョンを持っています。つまりあるUbuntuリリースにおいては
リリース | バージョン | |
---|---|---|
4. |
2. |
Ubuntuの登場 |
14. |
2. |
|
16. |
2. |
|
18. |
3. |
Python 3のみに移行 |
20. |
3. |
|
22. |
3. |
|
24. |
3. |
Python 2の完全削除 |
25. |
3. |
開発中のリリース |
バージョンについては2025年2月時点での数字です。UbuntuのシステムPythonの場合、同じリリースでもマイクロバージョン
UbuntuではもともとPython 2を使っていました。その後、Python 3へと段階的に移行し、2017年10月にリリースされた17.
ちなみにリリースによっては、
UbuntuのパッケージリポジトリにあるPython関連パッケージは、基本的にはこの
- リリース開発期間に合わせたバージョンのPythonパッケージがひとつないし複数用意される
- その中からシステムPythonのバージョンを決定する
- 必要に応じてシステムPythonのバージョンで動くようにPython関連パッケージを調整する
- 古いバージョンのPythonに依存するパッケージがなくなればそのバージョンのPython本体のパッケージは削除する
これをリリースごとに実施するのです。Ubuntu 24.
$ apt list '~spython' 2>/dev/null | wc -l 4848
ちなみにこの
このように対応することで、UbuntuのシステムPythonとパッケージリポジトリは次のような特性を持ちます。
- Ubuntuの特定のリリースにおいて
「システムPython」 は特定のPythonバージョン (メジャーバージョン+マイナーバージョン) を想定している[2] - Ubuntuの公式リポジトリにあるPython関連パッケージは原則としてシステムPython上でのみ動くことを想定している
- Ubuntuの公式リポジトリにあるPython関連パッケージは、同じリポジトリ・
リリースにあるPythonライブラリを使ってのみ動くことを想定している
たとえばシステムPythonである
このような前提に立った時、ひとつの問題が出てきます。つまりpip install foo
」
これに対してPython側ではPEP 668を策定して、Python固有のパッケージ管理システムでインストールするソフトウェアは仮想環境内に閉じ込めるよう、ユーザーへ促す方向に舵を切りました。Ubuntuでも、23.
つまり利用者としては次のような判断をしなくてはならないのです。
-
選択肢1:aptコマンドでPython製のソフトウェアやモジュールをインストールして使用する
- Ubuntuのパッケージ管理システムだけで完結するため、もっとも管理が楽な仕組み
- ただし特定の
(大抵の場合は古い) バージョンしか使えないのが難点 - Pythonのバージョンが固定化される点も注意が必要
- 新しいソフトウェアやバージョンがどんどん登場しているジャンルだと不向き
- 機械学習などでよくある
「古いPythonでしか動作確認していない」 ソフトウェアなどにも合っていない - 「定番」
である程度機能が 「安定」 しているものを使う場合の選択肢になる
-
選択肢2:自作のシンプルなPythonスクリプトを、Ubuntuのバージョンに合わせて動かす
- 標準ライブラリしか使わないようなスクリプトなら、Ubuntuのバージョンに合わせて調整するのが一番楽
- どうしても特定のバージョンのPythonでないと困る場合は、後述のdeadsnakes/
ppaを使うという手もある - 規模が大きくなってきたらPythonパッケージとして、次の項目と同じ扱いにすることとなる
-
選択肢3:Ubuntuリポジトリにないソフトウェアやモジュール、バージョンのPythonソフトウェアを動かす
- Ubuntuのパッケージ管理システムが使えないケース
- PEP 668の推奨に従えば、Pythonの文脈における
「仮想環境」 を作り、そこにPythonのやり方でインストールする - これにはいくつかの方法があるので、さらに選択が求められることになる
- またPythonはちょくちょく
「定番の方法」 が変わるのでそこにも注意が必要
十分に安定したソフトウェアであればまずは選択肢1の検討をおすすめします。特にサーバーのような継続的にセキュリティアップデートを適用しながら運用するシステムであれば、メンテナンスのコストが大きく下がります[4]。さらに言うと、もし
ここからは
Ubuntuに「python」コマンドは存在しない
少し話がそれますが、最近のUbuntuにPythonシステムはインストールされているものの、
$ python Command 'python' not found, did you mean: command 'python3' from deb python3 command 'python' from deb python-is-python3
Ubuntuにおける
もし何らかの理由で
$ sudo apt install python-is-python3
古いリリースのPythonをお手軽に使いたい
前述したとおりUbuntuのシステムPythonは、特定のバージョンに固定化されています。しかしながら自前のスクリプトや特定のPythonソフトウェアを動かすために、より新しいもしくは古いバージョンのPythonが必要になることはよくあります。
複数のバージョンのPythonを管理する場合、Python的にはpyenvやuvを使うのが一般的です。ただしこの場合はpyenvやuvが指定したディレクトリに環境が保存され、システムグローバルにそのバージョンが使えるとは限りません。もうすこしお手軽に異なるバージョンのPythonをインストールする方法としてよく使われるのが、deadsnakesが提供するdeadsnakes/
このPPAを導入するとaptコマンドで、いくつかのバージョンのPythonをインストールできます。
$ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt -U install -y python3.9 $ python3.9 --version Python 3.9.21
ただしすべてのPythonのバージョンをサポートしているわけではなく、Ubuntuの個々のリリースでビルドできるものに限られています。2025年2月時点では次のようなバージョンが提供されていました。
- Ubuntu 20.
04 LTS: Python 3. 5 - 3. 7, 3. 9 - 3. 13 - Ubuntu 22.
04 LTS: Python 3. 7 - 3. 9, 3. 11 - 3. 13 - Ubuntu 24.
04 LTS: Python 3. 7 - 3. 11, 3. 13
間が抜けているのはUbuntu本体でサポートしているバージョンです。またアルファ版である3.
Pythonインタープリターのコマンド名は
- pythonX.
Y-dev - pythonX.
Y-venv - pythonX.
Y-distutils - pythonX.
Y-lib2to3 - pythonX.
Y-gdbm - pythonX.
Y-tk
言い方を変えると、これ以外についてはdeadsnakes/
pipの代替としてのpipx
Python製のあるソフトウェアをインストールしたいだけであれば、pipではなく
pipxはまずvenvを用いて、ユーザーのホームディレクトリ内部に仮想環境を構築します。さらにその中に必要なモジュールを一通りインストールし、そのコマンドのシンボリックリンクを~/.local/
」
$ sudo apt install pipx $ pipx install cowsay installed package cowsay 6.1, installed using Python 3.12.3 These apps are now globally available - cowsay ⚠️ Note: '/home/ubuntu/.local/bin' is not on your PATH environment variable. These apps will not be globally accessible until your PATH is updated. Run `pipx ensurepath` to automatically add it, or manually modify your PATH in your shell's config file (i.e. ~/.bashrc). done! ✨ 🌟 ✨
インストールされたコマンドは~/.local/
」~/.profile
」~/.local/
」
$ ls -l ~/.local/bin/ total 4 lrwxrwxrwx 1 ubuntu ubuntu 54 Feb 11 13:02 cowsay -> /home/ubuntu/.local/share/pipx/venvs/cowsay/bin/cowsay $ cowsay Command 'cowsay' not found, but can be installed with: sudo apt install cowsay $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin (一度ログインし直す) $ cowsay -c tux -t "Hello" _____ | Hello | ===== \ \ \ .--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
ちなみにインストール時に--python Pythonコマンドのパス
」
pipとvenvで仮想環境を構築する
pipxは単一のPythonソフトウェアとその依存関係をインストールするのに適していますが、pip等を使ってライブラリをインストールする場合は引き続きpipコマンドが必要です。その場合は、venv等と合わせて使うことになるでしょう。実際にpipxも内部的には似たようなことをやっています。
$ sudo apt install python3-pip python3-venv 仮想環境を作成し有効化する $ python3 -m venv foo $ source foo/bin/activate cowsayを仮想環境内にインストールする (foo) $ pip install cowsay Collecting cowsay Downloading cowsay-6.1-py3-none-any.whl.metadata (5.6 kB) Downloading cowsay-6.1-py3-none-any.whl (25 kB) Installing collected packages: cowsay Successfully installed cowsay-6.1 (foo) $ command -v cowsay /home/ubuntu/foo/bin/cowsay 仮想環境を無効化するとcowsayが見えなくなる (foo) $ deactivate $ command -v cowsay (cosayが見えなくなる)
Python関連ツールをしっかり使う
ここまでは
ここではその中からpyenvとuvを紹介しましょう。
pyenv
最初の
$ sudo apt install build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev curl git \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev \ libffi-dev liblzma-dev $ curl -fsSL https://pyenv.run | bash (中略) # Load pyenv automatically by appending # the following to # ~/.bash_profile if it exists, otherwise ~/.profile (for login shells) # and ~/.bashrc (for interactive shells) : export PYENV_ROOT="$HOME/.pyenv" [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init - bash)" # Restart your shell for the changes to take effect. # Load pyenv-virtualenv automatically by adding # the following to ~/.bashrc: eval "$(pyenv virtualenv-init -)"
上記のスクリプトは~/.pyenv
」~/.pyenv/
」~/.profile
」
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
一度ログインしなおせば、pyenvコマンドを使えるようになります。
$ pyenv --version pyenv 2.5.2
「pyenv list」
$ pyenv install 3.9.21 Downloading Python-3.9.21.tar.xz... -> https://www.python.org/ftp/python/3.9.21/Python-3.9.21.tar.xz Installing Python-3.9.21... Installed Python-3.9.21 to /home/ubuntu/.pyenv/versions/3.9.21 $ pyenv versions * system (set by /home/ubuntu/.pyenv/version) 3.9.21 $ command -v python3.9 /home/ubuntu/.pyenv/shims/python3.9
使用するバージョンは
$ mkdir test && cd $_ $ pyenv local 3.9 $ pyenv versions system * 3.9.21 (set by /home/ubuntu/.python-version) $ python3 --version Python 3.9.21 $ cat .python-version 3.9 $ cd .. $ python3 --version Python 3.12.3
あとは、これとpip/
uv
最近は
ただしUbuntu/
$ curl -LsSf https://astral.sh/uv/install.sh | sh downloading uv 0.5.30 x86_64-unknown-linux-gnu no checksums to verify installing to /home/ubuntu/.local/bin uv uvx everything's installed! To add $HOME/.local/bin to your PATH, either restart your shell or run: source $HOME/.local/bin/env (sh, bash, zsh) source $HOME/.local/bin/env.fish (fish) WARNING: The following commands are shadowed by other commands in your PATH: uv uvx $ ls .local/bin/uv .local/bin/uv $ uv --version uv 0.5.30
uv自体はglibcにしか依存しないバイナリなので、1個のファイルを~/.local/
」~/.local/
」
具体的な使い方については、gihyo.
Anaconda
データサイエンスや機械学習でよく使われる
インストール方法は他と同じくスクリプトをダウンロードして実行になります。ただしPythonのパッケージ一式をダウンロードする都合上サイズが大きくなりがちな点に注意してください。コンパクトなバージョンもあり、用途に応じて使い分けることになります。
$ sudo apt install curl make $ curl -LO https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh $ bash Anaconda3-2024.06-1-Linux-x86_64.sh (snip) Do you accept the license terms? [yes|no] >>> yes あとはEnterでOK $ source ~/anaconda3/etc/profile.d/conda.sh $ conda --version conda 24.5.0
「~/anaconda3/
」
condaもpip/
Ubuntuが登場してから20年以上経ち、いつの間にやらPythonは技術的な面だけでなく、社会的な面でも重要な存在となってしまいました。これからも様々な人が多種多様な目的でPythonを使うことになるでしょう。もしUbuntu上でPythonを使いたい場合は、今回紹介したようなことを念頭に置いておくと変な問題に絡まれなくて済むはずです。