Python environment#

TPAは、ターゲットインスタンスの Distribution support に基づいて、どのPythonインタープリターを使用するかを決定します。可能な場合は常にPython 3を使用し、やむを得ない場合にのみPython 2にフォールバックします。

tpaexec configure コマンドは、ディストリビューションに応じてpreferred_python_version を設定します。

Distribution

Python 2

Python 3

Debian 12/bookworm

Yes

Yes (3.11)

Debian 11/bullseye

Yes

Yes (3.9)

Debian 10/buster

Yes

Yes (3.7)

Ubuntu 24.04/noble

No

Yes (3.12)

Ubuntu 22.04/jammy

No

Yes (3.10)

Ubuntu 20.04/focal

No

Yes (3.8)

RHEL 10.x

No

Yes (3.12)

RHEL 9.x

No

Yes (3.9)

RHEL 8.x

No

Yes (3.6)

RHEL 7.x

Yes

No (3.6)

SLES 15

No

Yes (3.6)

Ubuntu 20.04、22.04、24.04、RHEL 8.x、9.x、10.x、およびSLES 15は、Python 3でのみ使用できます。

RHEL 7.xにはPython 3.6が同梱されていますが、システムPython 3のlibrpmバインディングは利用できません。

他のディストリビューションの場合、python2 またはpython3 のどちらを優先するかを決定できますが、新しいクラスターのデフォルトはpython3 です。

下位互換性#

既存のクラスターとの互換性のため、preferred_python_version のデフォルト値はpython2 ですが、 python2 で既に展開されたシステムでもpython3 を明示的に選択できます。

cluster_vars:
  preferred_python_version: python3

TPAは、Python 3を使用できないディストリビューションではこの設定を無視します。

インストールされたスクリプトのPythonインタープリター#

TPAは、クラスターノードに少数のヘルパーPythonスクリプトたとえば、/etc/tpa/postgres-monitor 、展開がPostgresが利用可能になるのを待機するために使用する/etc/tpa/postgres-monitor をインストールします。インストールされた各スクリプトのシバン行は、script_python_interpreter ファクトからテンプレート化されています。

デフォルトでは、script_python_interpreter は/usr/bin/env {{ python }} に設定されます。これは、スクリプトが実行時にノードのPATH で最初に見つけたpython3 バイナリenv の下で実行されることを意味します。これは、TPAの歴史的な動作と一致し、ほとんどのホストでの正しい回答です。TPA自分自身がパッケージインストールのターゲットとしているシステムPythonを選択します。

TPAのインストールされたスクリプトを特定のPythonインタープリターで実行する必要がある場合たとえば、ホストに複数のPythonバージョンがあって、あいまいさを削除したい、または非システムPythonを使用したいため、 cluster_vars のscript_python_interpreter をに設定します必要なインタープリターの絶対パス

cluster_vars:
  script_python_interpreter: /usr/bin/python3

または、非システムPythonをポイントするには

cluster_vars:
  script_python_interpreter: /opt/python3.11/bin/python3

値は、シバン行の#! の後に逐語的に使用されるため、カーネルが直接exec できるパスである必要があります。この変数を設定する場合、スクリプトをサポートするためにTPAがインストールするOSパッケージたとえばpython3-psycopg2 がそのインタープリターで利用できることを確認します。TPAがインストールするパッケージに影響を与える方法については、次のセクションを参照してください。

インストールされたパッケージのPythonバージョン#

TPAは、スクリプトが依存するPythonモジュールpython3-psycopg2 などを提供する複数のOSパッケージRPMまたはDEBをインストールします。これらのパッケージ名を構成するために使用される名前プレフィックスは、ディストリビューションで検出されたPython RHEL 7以外の現在サポートされているすべてのディストリビューションではpython3 がデフォルトであるpython_pkg_prefix ファクトから取得されます。

TPAにデフォルト以外のPythonのパッケージをインストールさせたい場合たとえば、システムPythonとともにPython 3.11をインストールし、TPAをデフォルトのpython3-psycopg2 ではなく一致するpython311-psycopg2 パッケージに依存させたいため cluster_vars にpython_pkg_prefix を設定します。

cluster_vars:
  python_pkg_prefix: python311

TPAは、接頭辞を使用してパッケージ名を構成し、たとえばインストールします。 python311-psycopg2 、python311-barman など。

重要 python_pkg_prefix は、_TPAがインストールするOSパッケージの名前_のみを制御します。自分自身では、どのPythonインタープリターTPAインストールされたスクリプト/etc/tpa/postgres-monitor などで実行されるかは変更されません。複数のPythonインタープリターがインストールされているホストでpython_pkg_prefix を設定する場合、ほぼ確実にscript_python_interpreter 前のセクションを参照してください。一致するインタープリターの絶対パスを設定します。それ以外の場合、TPAのインストールされたスクリプトのデフォルトの/usr/bin/env ベースのシバンは、 PATH を介して、python_pkg_prefix 名前付けパッケージがインストールされたものとは別のPythonに解決される場合があり、インポートは実行時に失敗します。