Content last updated 2026-07-08

Python/ツールのパッケージ管理とインベントリ

Python バージョン、ツール、ライブラリのインベントリ一覧

このページの主な目的は、Data Platform で使用しているインベントリについて、主に Python ライブラリと以下のツールを念頭に置きながら、すべての詳細を保持することです。 目的は、誰が、なぜ、いつ、何をアップグレードするのかという詳細と基準を含む、整理されたインベントリ一覧を維持することです。また、Python ライブラリの最近のバージョンと最新バージョンに関する詳細を収集するための、アップグレードとコマンドラインアプリケーションに関する詳細な条件を公開する予定です。インベントリ一覧には以下が含まれます。

  • 🐍 使用中の Python バージョン
  • 🛠 使用しているツール(dbtairflowpermifrost
  • 📚 使用している Python ライブラリ (パッケージ)(例: pandasrequestsmatplotlib

私たちは、すべてのツールまたはパッケージに DRI を置くことを目指しています。DRI の責任は、そのツールまたはパッケージを健全な状態に保つため、アップグレードについて助言すること、またはアップグレードを開始することです。

アップグレードの一般的な動機

ツールのアップグレード戦略は各ツールに固有であるため、いつ、どのような状況でアップグレードするかは DRI に委ねられています。

アップグレードの動機:

  1. 脆弱性を減らす
  2. バグやクラッシュを修正する
  3. 他の更新済みテクノロジーとの互換性を確保する
  4. 使用する予定の新機能が導入された
  5. 適切なサポートを確保する
  6. 将来のアップグレードを容易にする(バージョンが古くなりすぎないようにする)
  7. Marketplace での関連性
  8. End of life

End of life の確認

最低限、私たちは end of life ポリシーに従います。これは、非推奨になったものは通常、重大なセキュリティ修正を含むバグ修正を受けられなくなり、私たちにとってセキュリティリスクになるためです。 Python バージョンを更新する主な基準は end-of-life パラメーターです。そのバージョンがすでにサポートされていない場合は、アップグレードの候補にするべきです。

バージョンアップグレードの開始 / スケジュール

DRI は、自分のツールまたはパッケージの領域における専門家であり、新しいバージョンやリリースを監視します。アップグレードが適用可能な場合、その助言を行い、アップグレードを開始します。この助言には以下が含まれます。

  1. アップグレードの動機
  2. 影響と依存関係
  3. アップグレードの重要度(タイムライン)

上記は Issue に記録され、週次の Data Platform Team ミーティングで議論されます。

計画

アップグレードは、Data Planning のドラムビートに従い、四半期ごとに OKR(P2)としてスケジュールされます。必要な場合(例: セキュリティ脆弱性がある場合)は、四半期中に P1 としてスケジュールできます。その結果、すでにスケジュールされていた P2-OKR 作業を妥協することになります。

Python イメージ / コンテナのインベントリ一覧

私たちは複数の 🐍Python イメージを使用しています。さまざまなバージョン(>=3.7)が使用されている理由は以下のとおりです。

  • プロジェクトごとにユースケースが異なる
  • 一部のライブラリは特定の 🐍Python バージョンを必要とする (依存関係のため)
  • 複数のチームがイメージを使用しており、特定バージョンの実装に要件がある

表 1: 使用しているイメージ一覧

イメージ使用中のバージョンイメージバージョンDRIユーザー
analytics3.10N\ATBAData Platform
airflow-image3.10.3python:3.10.3TBAData Platform
ci-python-image3.8.3python:3.8.3-slim-busterTBAData Platform
data-image3.10.3python:3.10.3TBAData Platform
dbt-image3.10.3python:3.10.3TBAData Platform
mlfow-infra3.8python:3.8TBAData Scientists
ci-streamlit-image3.12python:3.12-slim@rbacovicData Platform
ci-accountiq-image3.12python:3.12-slim@rbacovicData Platform
依存関係グラフ(クリックして展開)
---
title: Dependency graph for images and Python versions
---
flowchart LR
    P38  --> pip
    P310 --> pip
    P312 --> poetry
    P312 --> pip
    pip --> airflow-image
    pip --> ci-python-image
    pip --> data-image
    pip --> dbt-image
    pip --> mlfow-infra
    pip --> permifrost
    pip --> ci-accountiq-image
    poetry --> ci-streamlit-image


    data-image      --Inherit--> gitlab-data-utils
    data-image      --Inherit--> analytics
    ci-python-image --Inherit--> analytics


    subgraph Python
        P38[Python 3.8.3]
        P310[Python 3.10/3.10.3]
        P312[Python 3.12]
    end

    subgraph Package manager
       pip[pip]
       poetry[poetry]
    end

    subgraph Images
        airflow-image
        ci-python-image
        data-image
        data-science
        dbt-image
        gitlab-data-utils
        mlfow-infra
        permifrost
        ci-streamlit-image
        ci-accountiq-image
    end

    subgraph DEV [Development environment]
        analytics
    end

Python バージョン更新へのアプローチ

このセクションは、特定のイメージ内の 🐍Python バージョンをどのように、いつアップグレードするかのガイドラインです。Python バージョンをいつアップグレードするかについて統一された条件はなく、列挙されている項目のほとんどは推奨事項とベストメソッドです。この記述の主な理由は、私たちが使用しているイメージのユースケースが多様であるためです。

追加アップグレードのもう 1 つの重要な基準は、セキュリティ脆弱性です。潜在的な Python 脆弱性を確認するソースは以下のとおりです。

既知で確認済みの Python 脆弱性がある場合は、できるだけ早く Python バージョンのアップグレードプロセスを開始するべきです。

一般的に、以下のテキストでは一連の助言を公開しており、🐍Python バージョンをアップグレードしない特定の理由がある場合は、その説明を公開するとよいでしょう。

🐍Python バージョンの維持とアップグレード、および特定バージョンがいつ廃止されるかの確認については、Python supported timelineを確認するか、代替として endoflife.dateを確認できます。使用しているイメージのインベントリ一覧は以下の表に記載されています。 Python バージョンのアップグレードは、イメージへの影響が大きい可能性があるため、ケースバイケースで判断します。特定バージョンの end-of-life を考慮することは良い選択肢です。

end-of-life ポリシーの例: アップグレードポリシーについては、最低限、end of life ポリシーに従うべきだと考えています。 これは、非推奨になったものは通常、重大なセキュリティ修正を含むバグ修正を受けられなくなり、私たちにとってセキュリティリスクになるためです。

  1. Python life cycleによると、現在使用している以下の Python バージョンは end-of-life であるか、それに近い状態です。
    1. 3.7 はすでに end of life
    2. 3.8 は 2024 年末に end of life

ツールのインベントリ一覧

表 2: GitLab Data team が使用しているツール一覧

ツール名使用中のバージョンサポート対象バージョンのタイムラインアップグレード方法DRIユーザーアップグレードポリシー
dbt1.9.2リンク- dbt アップグレードのベストプラクティス
- dbt バージョンのアップグレード
TBA- Data Platform
- Analytics Engineers
- Data Scientists
2 バージョンより遅れない(ベータリリースを除く)かつ最小サポートレベルは critical
airflow2.10.5リンクAirflow のアップグレード計画TBAData Platform現在のバージョンがリリースから 1 年超
permifrost0.15.4リンクpermifrost バージョンのアップグレード@rbacovicData Platform2 バージョンより遅れない(ベータリリースを除く)

dbt パッケージのインベントリ

パッケージ名使用中のバージョンDRIユーザー
snowflake_spend1.1N\A-Data Engineers
-Analytics Engineers
data-testsN\AN\A-Data Engineers
-Analytics Engineers
dbt-labs/audit_helper0.9.0N\A-Data Engineers
-Analytics Engineers
dbt-labs/dbt_utils1.1.1N\A-Data Engineers
-Analytics Engineers
dbt-labs/snowplow0.15.1N\A-Data Engineers
-Analytics Engineers
dbt-labs/dbt_external_tables0.8.7N\A-Data Engineers
-Analytics Engineers
brooklyn-data/dbt_artifacts2.8.0N\A-Data Engineers
-Analytics Engineers

ツールバージョン更新へのアプローチ

end-of-life ポリシーの例: アップグレードポリシーについては、最低限、end of life ポリシーに従うべきだと考えています。 これは、非推奨になったものは通常、重大なセキュリティ修正を含むバグ修正を受けられなくなり、私たちにとってセキュリティリスクになるためです。

  1. airflow life cycleによると、1.10.15 の end of life は June 17, 2021 でした。そのため今後は、この end of life ルールに従う場合、より早い段階でアップグレードするようにします。
  2. dbt latest releases
    1. v1.2v1.3 はすでに end of life であり、2023 年末に完全に非推奨になります。
    2. dbt はアップグレードのベストプラクティスを説明しており、その 1 つは少なくとも新しい patch versions、つまり “bugfix” または “security” リリースへアップグレードすることです。

ライブラリのインベントリ一覧

ライブラリのインベントリ一覧は、ライブラリのアップグレードに必要なすべての情報を収集するコマンドラインアプリケーションを用いた、やや自動化されたプロセスです。ライブラリに関するすべての情報を収集するだけでなく、このアプリケーションはアップグレードプロセスに役立つ 2 つのレポートを生成します。

  1. 各イメージのインベントリ一覧を取得 - 実装しているライブラリが古いかどうか、最新バージョンからどの程度離れているかを確認するため。
  2. イメージ間で重複しているバージョンを確認 - 複数のイメージで使用されているバージョンがあり、そのバージョンが同期していないかを確認するため。ライブラリのバージョンが同期していない場合、ミスマッチしている具体的な理由がある可能性があります。一般的には、(可能であり、阻害要因でない場合) イメージ間で一意のバージョンを維持すると便利です。

このプログラムを実行するには、/package_inventory repoをチェックアウトし、以下のコードを実行してください。

  • プログラムを実行
# run file
python3 gitnventory.py [--dry-run] [--logging [print/logging]] [--report_folder DEFINE_FOLDER] [--log_file DEFINE_LOG_FILE] [--help]

プログラムがどのように実行されているかの詳細は、source codeを参照してください。

注: 私たちは、ライブラリの最新バージョンの主な情報源として PyPiGitLab Data グループに依存していることを念頭に置いてください。

表 3: Python ライブラリの DRI

ツール名DRI
Python libraries@rbacovic

ライブラリ更新へのアプローチ

アップグレード基準の候補リストを作成するための提案:

表 4: Python、ツール、ライブラリのバージョンアップグレード基準の例

基準実装リスク
(1.0 低、5.0 高)
現在のバージョンが古く、すでにサポートされていない(end-of-life ポリシー)Python 2.74.0 ⭐⭐⭐⭐☆
現在のバージョンに脆弱性があるArticleN\A
メジャーバージョンがリリースされた現在のバージョン: 2.1.0
最新バージョン 3.0.0
3.0 ⭐⭐⭐☆☆
マイナーバージョンがリリースされた現在のバージョン: 2.1.0
最新バージョン 2.2.0
1.0 ⭐☆☆☆
パッチバージョンがリリースされた現在のバージョン: 2.1.0
最新バージョン 2.1.8
1.0 ⭐☆☆☆☆

ライブラリの更新は、いつ、なぜアップグレードするかを判断するのが難しい場合がありますが、いくつかの検討事項が役立ちます。end-of-life 基準に加えて、以下の場合はアップグレードを検討するべきです。

  • 特定バージョンの新機能が必要 - 必要または使用したい重要な機能がある場合は、アップグレードに進むべきです。
  • パッケージに重大な脆弱性がある場合のみアップグレード - これは常に重大な警告であり、直ちにアップグレードを開始するべきです。
  • x メジャー / マイナーバージョンより遅れている場合にアップグレード - 影響を慎重に検討したうえで、アップグレードへ進む十分な理由になる可能性があります。たとえば、新しいメジャーバージョンへ移行する場合、ケースによっては新しい Python バージョンが必要になります。リスクが適切に評価されている場合は、進めるべきです。

依存関係の確認

アップグレードの理由は、依存ツール / パッケージである場合があります。たとえば、dbt をアップグレードする予定があり、それに伴って 🐍 Python のアップグレードも必要になることがあります dbt-image イメージの場合)。他のツール (この例では dbt に必要とされるため、Python をアップグレードする理由になり得ます。

アップグレードのヒントとコツ

やること:

  • プラットフォームに影響を与える可能性のある既知の Issueがある場合は、臨時のアップグレードを行う
  • 🐍 Python パッケージをメジャーバージョン変更へアップグレードする場合、イメージ内で有効な Python バージョンとの互換性を確認する。衝突が発生する可能性があります。
  • インストール / アップグレードしたい 🐍 Python パッケージが安全であり、悪意のあるコードを含んでいないか確認する
  • 他のパッケージとの後方互換性を常に確認する (プロジェクト内の pipeline が、イメージビルド中にここを支援します)

🛑 やらないこと:

  • ソフトウェアの pre-release バージョンにはアップグレードせず、常にstable release バージョンを使用する
  • non-trusted ソースを使用しない。インストール元としては PyPi または GitLab Data グループのパッケージを推奨します。

アップグレードログ

表 5: アップグレードに関する活動ログ

四半期
(どの四半期にアップグレード計画を行うか)
アップグレード確認用 Issue
(アップグレード計画に使用する予定の Issue へのリンクを入れる)
アップグレード実行
(どの四半期にアップグレード実行を行うか)
計画済みアップグレード用 Epic
(アップグレード実行に使用する予定のエピックへのリンクを入れる)
アップグレード種別
[Python|Tool|Libraries]
(アップグレード予定の対象種別)
DRI
(アップグレード計画に必要な内容を確認する担当者)
FY24Q4#19248FY25Q1@rbacovic
FY25Q1#20233FY25Q2@rbacovic
FY25Q2#21082FY25Q3@rbacovic
FY27Q1#26436@rbacovic