Loading...

2024-08-28(水) 11:00

🐍 UbuntuにpyenvとPythonをインストールする手順

UbuntuPython
UbuntuにpyenvとPythonをインストールする手順について解説します。

目次

前提と注意事項

この記事では以下を前提としています。

  • 動作確認に使った 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 は以下の公式リポジトリの手順に従ってインストールします。

Installation

Getting Pyenv

github.com

以下を実行して 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の末尾に追記します。

~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

以下で~/.bashrcを再読み込みします。

.bashrcを再読み込み
$ source ~/.bashrc

pyenv のバージョンを確認します。

pyenvのバージョンを確認する
$ pyenv -v
pyenv 2.4.10

以上で最新の pyenv をインストールできました。続いて pyenv を使って Python をインストールします。

pyenv を使ってインストール可能な Python のバージョンを確認する

以下のようにpyenvコマンドを使うことで、インストール可能な Python のバージョンを確認できます。

インストール可能な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 のバージョンについては以下で一覧を確認できます。

インストール済みのPythonのバージョンを確認する
$ pyenv versions
* system (set by /home/username/.pyenv/version)
  3.12.5

Python をインストールする

pyenv を使って以下を実行し、Python をインストールします。

指定バージョンのPythonをインストールする
$ pyenv install 3.12.5

上記ではバージョン3.12.5を指定してインストールしています。 最新の安定版は以下の Python 公式サイトで確認できます。 実行すると以下のように表示されます。

指定バージョンの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 ではなく他の環境で実行する場合は、インストールにかかる時間はもっと早いかもしれません。 以下が実行結果です。

指定バージョンの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

上記のようにInstalled Python-3.12.5 to /home/username/.pyenv/versions/3.12.5と表示されていれば正常にインストールが完了です。

バージョンを確認してみると以下のように表示されます。

Pythonのバージョンを確認する
$ python3 -V
Python 3.12.5

ModuleNotFoundError が発生する場合

Python のインストールを実行した時に以下のようにModuleNotFoundErrorが発生する場合があります。

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 に必要となるパッケージが不足しているために発生します。上記をみて分かる通り、readlinesqlite3tkinterなどのパッケージが不足しているために発生しています。 これを回避するために、冒頭に記載したように以下を実行して必要なパッケージを事前にインストールしておく必要があります。

必要パッケージをインストール
$ 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 のインストールを実行すると以下のようになります。

再度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 のバージョンを指定することができます。

使用するPythonのバージョンを切り替える
$ pyenv global 3.12.5

もしディレクトリ毎に異なる Python のバージョンを使用したい場合は、以下のように目的のディレクトリに移動してからlocalを使います。

ディレクトリ毎に異なるPythonのバージョンを使用する
$ cd /path/to/mydirectory
$ pyenv local 3.12.5

これでディレクトリ毎に異なる Python のバージョンを使用することができます。

まとめ

Ubuntu に pyenv と Python をインストールする手順を解説しました。pyenv を使うことで任意の Python をインストールできるようになります。Python のバージョンを切り替える際にも pyenv を使うことで簡単に切り替えることができます。