前提と注意事項
この記事では以下を前提としています。
- 動作確認に使った Ubuntu のバージョンは 22.04 です。
この記事のゴール
Ubuntu に Python をインストールし、Python のバージョンを確認できるところまでをゴールとします。なお、Python のインストールのために pyenv を使用するため、pyenv もインストールします。
この記事の手順は以下のサイトの手順を参考にしました。
Ubuntu環境のPython
Ubuntu には最初からPythonがインストールされており、そのまま利用可能です。しかし、このPython は、 OS がさまざまな機能を提供するために使用しています。ユーザが勝手にパッケージを導入したりすると、 OS の安定性を損なうことも考えられますので、別途、あたらしいPythonをインストールするのが一般的です。ここではPythonのソースコードをダウンロードし、インストールする手順を紹介します。
python.jp
事前準備
pyenv と Python をインストールするにあたって、以下のパッケージを Ubuntu にインストールしておきます。以下を実行します。
$ sudo apt update
$ sudo apt install zlib1g-dev libssl-dev libsqlite3-dev libbz2-dev libncurses5-dev libgdbm-dev liblzma-dev libssl-dev tcl-dev tk-dev libreadline-dev
以上で必要なパッケージのインストールが完了です。
pyenv をインストールする
pyenv は以下の公式リポジトリの手順に従ってインストールします。
以下を実行して pyenv のインストール用のスクリプトをダウンロード、実行します。
$ curl https://pyenv.run | bash
実行すると以下のように表示されます。
$ curl https://pyenv.run | bash
Receiving objects: 100% (64/64), 41.90 KiB | 3.81 MiB/s, done.
Resolving deltas: 100% (10/10), done.
WARNING: seems you still have not added 'pyenv' to the load path.
# 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 -)"
# Restart your shell for the changes to take effect.
# Load pyenv-virtualenv automatically by adding
# the following to ~/.bashrc:
eval "$(pyenv virtualenv-init -)"
上記の指示にある通り、以下の内容を~/.bashrc
の末尾に追記します。
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
以下で~/.bashrc
を再読み込みします。
$ source ~/.bashrc
pyenv のバージョンを確認します。
$ pyenv -v
pyenv 2.4.10
以上で最新の pyenv をインストールできました。続いて pyenv を使って Python をインストールします。
pyenv を使ってインストール可能な Python のバージョンを確認する
以下のようにpyenv
コマンドを使うことで、インストール可能な Python のバージョンを確認できます。
$ pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
2.4.0
2.4.1
2.4.2
2.4.3
# ...省略...
また、インストール済みの Python のバージョンについては以下で一覧を確認できます。
$ pyenv versions
* system (set by /home/username/.pyenv/version)
3.12.5
Python をインストールする
pyenv を使って以下を実行し、Python をインストールします。
$ pyenv install 3.12.5
上記ではバージョン3.12.5
を指定してインストールしています。
最新の安定版は以下の Python 公式サイトで確認できます。
実行すると以下のように表示されます。
$ pyenv install 3.12.5
Downloading Python-3.12.5.tar.xz...
-> https://www.python.org/ftp/python/3.12.5/Python-3.12.5.tar.xz
Installing Python-3.12.5...
# ...省略...
今回は Raspberry Pi 4 上で動作する Ubuntu でインストールを行ったため、上記が完了するのに 10 分ほど時間がかかりました。Raspberry Pi ではなく他の環境で実行する場合は、インストールにかかる時間はもっと早いかもしれません。 以下が実行結果です。
$ pyenv install 3.12.5
pyenv: /home/username/.pyenv/versions/3.12.5 already exists
continue with installation? (y/N) y
Downloading Python-3.12.5.tar.xz...
-> https://www.python.org/ftp/python/3.12.5/Python-3.12.5.tar.xz
Installing Python-3.12.5...
Installed Python-3.12.5 to /home/username/.pyenv/versions/3.12.5
上記のようにInstalled Python-3.12.5 to /home/username/.pyenv/versions/3.12.5
と表示されていれば正常にインストールが完了です。
バージョンを確認してみると以下のように表示されます。
$ python3 -V
Python 3.12.5
ModuleNotFoundError が発生する場合
Python のインストールを実行した時に以下のようにModuleNotFoundError
が発生する場合があります。
$ pyenv install 3.12.5
Downloading Python-3.12.5.tar.xz...
-> https://www.python.org/ftp/python/3.12.5/Python-3.12.5.tar.xz
Installing Python-3.12.5...
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'readline'
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/username/.pyenv/versions/3.12.5/lib/python3.12/sqlite3/__init__.py", line 57, in <module>
from sqlite3.dbapi2 import *
File "/home/username/.pyenv/versions/3.12.5/lib/python3.12/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/username/.pyenv/versions/3.12.5/lib/python3.12/tkinter/__init__.py", line 38, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_tkinter'
WARNING: The Python tkinter extension was not compiled and GUI subsystem has been detected. Missing the Tk toolkit?
Installed Python-3.12.5 to /home/username/.pyenv/versions/3.12.5
このModuleNotFoundError
はインストール先である Ubuntu に必要となるパッケージが不足しているために発生します。上記をみて分かる通り、readline
、sqlite3
、tkinter
などのパッケージが不足しているために発生しています。
これを回避するために、冒頭に記載したように以下を実行して必要なパッケージを事前にインストールしておく必要があります。
$ sudo apt update
$ sudo apt install zlib1g-dev libssl-dev libsqlite3-dev libbz2-dev libncurses5-dev libgdbm-dev liblzma-dev libssl-dev tcl-dev tk-dev libreadline-dev
上記を実行後、再度 Python のインストールを実行すると以下のようになります。
$ pyenv install 3.12.5
pyenv: /home/username/.pyenv/versions/3.12.5 already exists
continue with installation? (y/N) y
Downloading Python-3.12.5.tar.xz...
-> https://www.python.org/ftp/python/3.12.5/Python-3.12.5.tar.xz
Installing Python-3.12.5...
Installed Python-3.12.5 to /home/username/.pyenv/versions/3.12.5
o 上記でpyenv: /home/username/.pyenv/versions/3.12.5 already exists continue with installation? (y/N) y
のように聞かれますが、y
を入力して続行して問題ありません。問題なければ正常にインストールが完了します。
使用する Python のバージョンを切り替える
以下のようにglobal
を使うと Ubuntu 全体で使用する Python のバージョンを指定することができます。
$ pyenv global 3.12.5
もしディレクトリ毎に異なる Python のバージョンを使用したい場合は、以下のように目的のディレクトリに移動してからlocal
を使います。
$ cd /path/to/mydirectory
$ pyenv local 3.12.5
これでディレクトリ毎に異なる Python のバージョンを使用することができます。
まとめ
Ubuntu に pyenv と Python をインストールする手順を解説しました。pyenv を使うことで任意の Python をインストールできるようになります。Python のバージョンを切り替える際にも pyenv を使うことで簡単に切り替えることができます。