本記事は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 でもバージョンの辻褄を合わせたい方
- (過去の自分)
目次
- はじめに
- どんなひとに読んで欲しい
- 目次
- 動作環境
- 注釈:Amazon Linux 2023 での Python について
- Python 3.11.7 以上のインストール
- おまけ:Python 3.12.* のインストールお試し
- おまけ:インストールのための実行コマンド 箇条書き
- おわりに
- お知らせ
動作環境
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 がインストールされています。
$ 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のご支援をしております。
https://www.ap-com.co.jp/service/utilize-aws/
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。