Technical Blog テクニカルブログ
  1. HOME
  2. テクニカルブログ
  3. AWSでPythonバージョンアップしてみた

AWSでPythonバージョンアップしてみた

投稿者:清水

  • はじめに
  • バージョンアップを実施するメリット
  • バージョンアップを実施するデメリット
  • バージョンアップする際の判断基準
  • 実施内容
  • さいごに

はじめに

こんにちは、NI+C AWSチームの清水です。
現在使用しているライブラリの新機能の追加であったり、セキュリティ面やサポート期間の面などでバージョンアップを検討する機会が訪れることがあるかもしれません。
今回は、実際にAWSでPythonのバージョンアップを実施した内容についてご紹介させていただきます。

バージョンアップを実施するメリット

バージョンアップを実施するメリットとしては、以下があげられると思います。

  1. セキュリティ改善
    ・古いバージョンでは既知の脆弱性が残る可能性。
    ・最新版のライブラリではセキュリティパッチが適用されている。
  2. パフォーマンス向上
    ・新しいバージョンは最適化されており、処理速度やメモリ使用量が改善されることが多い。
  3. 新機能の追加
    ・新たなライブラリ関数やメソッドが追加され、開発効率が向上。
  4. バグ修正
    ・既知の問題や不具合が修正されている。

新機能の追加やバグ修正については、Pythonのリリースノートに記載されているのでそちらを参照してみてください。
Pythonリリースノート : https://docs.python.org/ja/3.13/whatsnew/index.html

バージョンアップを実施するデメリット

次にバージョンアップを実施するデメリットとしては、以下があげられると思います。

  1. 互換性の問題
    ・他の依存関係が新バージョンと互換性がない場合、動作しないことがある。
  2. 新たなバグリスク
    ・新バージョンにも新しいバグが含まれていることがあり、デバッグが必要。
  3. 開発コストと時間
    ・バージョンアップに伴うテストや修正に時間とコストがかかる。

実際にバージョンアップを実施してみた感想としては、互換性の問題でエラーが多数発生するプログラムもあったため、ソースコードを修正するのが大変で時間がかかりました。
互換性の問題で最新バージョンにできないライブラリもあり、そういったライブラリについては、ひとつ前のマイナーバージョンで互換性のあるライブラリを使用しました。

バージョンアップする際の判断基準

次にバージョンアップを実施する際の判断基準について説明します。私がライブラリのバージョンアップを実施した際にもこちらを基準にしてバージョンアップをするかどうか判断しました。
下記に記載している判断基準をぜひ参考にしてみてください。

  1. 新機能と改善点
    ・新しいバージョンでどのような新機能や改善点が追加されているかを確認する。
     →公式のPythonリリースノートやドキュメントを参照すると良い。
      Pythonドキュメント:https://docs.python.org/ja/3/
  2. セキュリティアップデート
    ・新しいバージョンがセキュリティアップデートを含んでいる場合、できるだけ早くアップデートを検討
     すべきである。
     →セキュリティ脆弱性は重大なリスクを伴うため。
  3. 互換性
    ・使用しているライブラリやフレームワークが新しいPythonのバージョンに対応しているかどうか確認
     する。
     プロジェクト全体のコードが大規模な更新無しにそのまま動作するかも重要である。
  4. サポート期間
    ・現在使っているバージョンのPythonが公式にサポートされている間にアップデートするほうが良い。
     公式サポート期限を過ぎたバージョンを使い続けるとセキュリティリスクが増加する。
  5. パフォーマンス向上
    ・新しいバージョンがパフォーマンスの向上を含んでいる場合、それがプロジェクトにとって有益である
     かどうかを評価する。
  6. バグフィックス
    ・新しいバージョンが既知のバグを含んでいるかどうかを確認する。
     それにより開発効率と品質が向上する可能性がある。
  7. コミュニティの意見や使用状況
    ・Pythonコミュニティや同僚の意見も参考にする。
     他のプロジェクトが新しいバージョンに移行しているかどうか、その理由は何かを調査する。

これらの要因を総合的に考慮し、プロジェクトのニーズやリスク、コストと時間を天秤にかけて
バージョンアップを行うかを決定します。

実施内容

続いて実際に実施した内容について説明します。
バージョンアップを行う際の参考にしてみてください。

  1. 使用ライブラリの整理
    ・使用しているライブラリを洗い出し、現在使用しているバージョンを確認。
  2. 外部ライブラリとPythonバージョンの互換バージョン整理
    ・外部ライブラリを最新バージョンに上げて互換性があるかを確認。
     →互換性がない場合は互換性があるバージョンまで下げる。
  3. 対象バージョンの脆弱性確認
    ・公式サイトのセキュリティリストやリリースノートを確認。
  4. 使用バージョンの決定
  5. 動作確認
    ・バージョンアップしたことでソースコードの修正が必要な場合は修正を行う。
  6. データ比較
    ・出力ファイルのデータを使用し、現新比較を行う。

今回バージョンアップを実施した際に、互換性エラーが発生したためバージョンを下げたライブラリが2つあります。ここでは、それぞれのライブラリで発生したエラーとその対応方法について詳しく説明します。

  1.protobuf と利用ライブラリの競合(バージョン間の不整合)
  最初に問題となったのは、protobufというライブラリです。
  Python3.11の環境でprotobufを最新の4.25.1にバージョンアップしようとしたところ、AWS上で
  CodeBuildする際に下記のエラーが発生しました。

  原因:他のライブラリと依存関係が競合しているため、protobufのインストールができない。
  対処:protobufのバージョンを最新の4.25.1ではなく4.23.4へのバージョンアップとした。

  2. scikit-learn ライブラリのバージョンエラー(学習データ互換性の問題)
  スコアリングプログラムのscikit-learnのバージョンを1.2.2から最新の1.3.2へ上げたところ、 SageMaker
  の学習モデルのデータを使用しているプログラムの学習データのpickleファイルの読み込み処理でエラー
  が発生しました。

  原因:scikit-learnのバージョンが書き出し(SageMakerの学習モデルのscikit-learnバージョン1.2.2)と読
     み込み(スコアリングプログラムのscikit-learnのバージョン1.3.2)で差異が発生していることによる
     互換性エラー。

  対応策を調査した結果、以下の2つを対応策としてあげました。
   案1. スコアリングプログラムのscikit-learnのバージョンを1.2.2のままにする。
   案2. SageMakerの学習モデルのscikit-learnのバージョンを最新の1.3.2にアップグレードする。

  対処:案1
  理由:①案2の場合、学習データの再作成によるデータ差異を懸念したため。
     ②案2の場合、SageMakerの学習モデルのソースコードの修正や等価性テストなど対応にかかる
      工数と影響が大きくなるため。

以上が、今回発生した互換性エラーとその対応方法です。

さいごに

いかがでしたでしょうか?
バージョンアップするには、メリットとデメリットがあるのでこれらを総合的に評価してPython等のバージョンアップを実施していくことが重要です。

こちらの投稿内容が、みなさまの参考になれば幸いです。
最後までご覧いただきありがとうございました。

ページのトップへ