APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【AP Tech Blog Week】Amazon Linux 2023 でも Python 3.11.7 以上を使いたい

本記事はAP Tech Blog Weekのものになります。

はじめに

こんにちは、エーピーコミュニケーションズ クラウド事業部の坂口です。

AWS CloudShell や AWS Cloud9 (、はたまた Amazon EC2) で Amazon Linux 2023 が使われるようになり、使いたい Python バージョンですぐに開発が行えず困ることがありました。

手元の Windows での Python バージョンに合わせられるようにしたいと思ったことがきっかけですが、つらつらと書いていこうと思います。

どんなひとに読んで欲しい

  • Amazon Linux 2023 で Python 3.11.7 以上を使いたい方
  • 最新だったからと Windows で適当に 3.11.8 を入れて、Amazon Linux 2023 でもバージョンの辻褄を合わせたい方
    • (過去の自分)

目次

動作環境

2024/4 時点、東京リージョン / AWS CloudShell にて確認しています。

(ディストリビューションの確認)

$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023.3.20240312"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/amazon-linux-2023/"
DOCUMENTATION_URL="https://docs.aws.amazon.com/linux/"
SUPPORT_URL="https://aws.amazon.com/premiumsupport/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
VENDOR_NAME="AWS"
VENDOR_URL="https://aws.amazon.com/"
SUPPORT_END="2028-03-15"

注釈:Amazon Linux 2023 での Python について

デフォルトの Python バージョン

Amazon Linux 2023 では、デフォルトとして Python3.9 がインストールされています。

docs.aws.amazon.com

$ python3 -V
Python 3.9.16

確認してみると、Python 3.9.16 でした。

Python 3.9 で問題なければ、コングラチュレーション!! 引き続き Amazon Linux 2023 で遊んでください。

Python 3.11

また Python 3.11 ですが、Python 3.11.2, 3.11.6 なら気にせず使えそうです。

上記のバージョンであれば Amazon Linux 2023 でのパッケージに含まれているようで、そのままインストールできました。

Python 3.11 を使いたいだけであればこちらで十分そうです。

※タイトルで Python 3.11.7 以上としているのはこの理由が大きい

$ dnf --showduplicates search python3.11
︙
=============== Name Exactly Matched: python3.11 ===============
python3.11-3.11.2-2.amzn2023.0.10.x86_64 : Version 3.11 of the Python interpreter
python3.11-3.11.2-2.amzn2023.0.11.x86_64 : Version 3.11 of the Python interpreter
python3.11-3.11.2-2.amzn2023.0.6.x86_64 : Version 3.11 of the Python interpreter
python3.11-3.11.2-2.amzn2023.0.7.x86_64 : Version 3.11 of the Python interpreter
python3.11-3.11.6-1.amzn2023.0.1.x86_64 : Version 3.11 of the Python interpreter
python3.11-3.11.6-1.amzn2023.0.2.x86_64 : Version 3.11 of the Python interpreter
=============== Name Matched: python3.11 ====================
︙


(お試しインストール)

$ sudo dnf install -y python3.11-3.11.2-2.amzn2023.0.10.x86_64
︙
Complete!
$ python3.11 -V
Python 3.11.2
$ sudo dnf install -y python3.11-3.11.6-1.amzn2023.0.2.x86_64
︙
Complete!
$ python3.11 -V
Python 3.11.6

Python 3.11.7 以上のインストール

それでは次に、パッケージに含まれない Python 3.11.7 以上のインストールはどうしよう...ということで。

リポジトリを追加するのも手間なため、今回は pyenv で欲しいバージョンをインストールしていこうと思います。

なお、こちらの記載 から Python 3.11.5 以降は OpenSSL 3.0 が使われるようです。

$ openssl version
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)

念のため確認してみましたが、OpenSSL 3.0.8 が使われていましたので問題なさそうですね。

pyenv のインストール

これで心置きなく pyenv をインストールしていけそうですが、まずは pyenv の記載 やその他先人の偉大なブログ記事などを参考に、以下のコマンドを実行します。

$ sudo dnf install -y gcc zlib-devel bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel


また pyenv 本体のインストールは、Automatic installer を使って行います。

前提として Git が必要になりますが、Amazon Linux 2023 にデフォルトでインストールされていました。

$ dnf list --installed | grep "git"
crypto-policies.noarch                 20220428-1.gitdfb10ea.amzn2023.0.2 @System      
git.x86_64                             2.40.1-1.amzn2023.0.1              @amazonlinux 
git-core.x86_64                        2.40.1-1.amzn2023.0.1              @amazonlinux 
git-core-doc.noarch                    2.40.1-1.amzn2023.0.1              @amazonlinux 
net-tools.x86_64                       2.0-0.59.20160912git.amzn2023.0.3  @amazonlinux 


以下のコマンドで pyenv をインストールします。

$ curl https://pyenv.run | bash


︙
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 -)"


WARNING として上記の内容が出力される場合は、指示に沿って以下コマンドを実行します。

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc

$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc


実行後、同様に WARNING の指示に従いシェルを再起動します。

$ exec $SHELL -l


pyenv がインストールされました。

$ pyenv --version
pyenv 2.4.0

Python 3.11.7 のインストール

まずは pyenv でインストールできる Python 3.11.* のバージョンを確認してみます。

$ pyenv install -l | grep "3.11"
  3.11.0
  3.11-dev
  3.11.1
  3.11.2
  3.11.3
  3.11.4
  3.11.5
  3.11.6
  3.11.7
  3.11.8
  3.11.9
︙

インストール可能な Python バージョンが表示されました。

タイトルで Python 3.11.7 以上、と銘打っているので、まずは素直に Python 3.11.7 をインストールしてみます。

$ pyenv install 3.11.7
Downloading Python-3.11.7.tar.xz...
-> https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tar.xz
Installing Python-3.11.7...
Installed Python-3.11.7 to /home/cloudshell-user/.pyenv/versions/3.11.7

$ pyenv rehash


pyenv rehashこちらの記載 を参考に実施。本記事内では、以降の記載は省略します

無事に Python 3.11.7 が表示されました。

$ pyenv versions
* system (set by /home/cloudshell-user/.pyenv/version)
  3.11.7


それでは、せっかくなので pyenv local で特定ディレクトリの中で使われる Python を 3.11.7 に設定してみます。

$ pwd
/home/cloudshell-user
$ python3 -V
Python 3.9.16
$ mkdir work; cd work

$ pyenv local 3.11.7
$ pyenv versions
  system
* 3.11.7 (set by /home/cloudshell-user/work/.python-version)
$ python3 -V
Python 3.11.7

Python のバージョンが 3.11.7 となっていることを確認できました。

Python 3.11.9 のインストール

そのまま、最新の Python 3.11.9 もインストールを試してみましょう。

(Python 3.11.9 は 2024/4/2 リリース)

ついでに、コマンドが完了するまで長かったので、時間も計ってみます。

$ time pyenv install 3.11.9
Downloading Python-3.11.9.tar.xz...
-> https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tar.xz
Installing Python-3.11.9...
Installed Python-3.11.9 to /home/cloudshell-user/.pyenv/versions/3.11.9

real    6m47.984s
user    5m45.501s
sys     0m32.974s

$ pyenv local 3.11.9
$ pyenv versions
  system
  3.11.7
* 3.11.9 (set by /home/cloudshell-user/work/.python-version)
$ python3 -V
Python 3.11.9

Python 3.11.9 もインストールできていることを確認できました。

なお計測した時間で7分程かかっていますが、Python 3.11.7 でも同じような時間がかかっていたかと思います。

実施の際は、そこそこ時間かかるかも?ということはご留意ください。

おまけ:Python 3.12.* のインストールお試し

ついでに、Python 3.12.* のインストールとして現状で最新となる Python 3.12.3 のインストールも試してみました。

(Python 3.12.3 は 2024/4/9 リリース)

$ pyenv install 3.12.3
Downloading Python-3.12.3.tar.xz...
-> https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tar.xz
Installing Python-3.12.3...
Installed Python-3.12.3 to /home/cloudshell-user/.pyenv/versions/3.12.3

$ pyenv rehash

$ pyenv global 3.12.3
$ pyenv versions
  system
* 3.12.3 (set by /home/cloudshell-user/.pyenv/version)
$ python3 -V
Python 3.12.3

pyenv global は Python バージョンを特定のディレクトリのみではなく、全体に適用する設定となります

こちらもちゃんとインストールできるようです。

おまけ:インストールのための実行コマンド 箇条書き

Python 3.11.7 のインストールについて、効率を求める方向けに一連の実行コマンドを余計な記述なしで記載しておきます。

$ sudo dnf install -y gcc zlib-devel bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel
$ curl https://pyenv.run | bash
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

$ exec $SHELL -l
$ pyenv install 3.11.7
$ pyenv rehash
$ pyenv versions

おわりに

Amazon Linux 2023 で Python 3.11.7 以上を使用する方法について記載しました。

この記事が、AWS での開発の選択肢を広げるきっかけになれば幸いです。


それではご機嫌なAWSライフを!

お知らせ

APCはAWS Advanced Tier Services(アドバンストティアサービスパートナー)認定を受けております。


その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。

www.ap-com.co.jp

https://www.ap-com.co.jp/service/utilize-aws/

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp

本記事の投稿者: さかぐち
AWSをメインにインフラ系のご支援を担当しています。最近 AWS 全冠しました。
Takumi Sakaguchi - Credly