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に解決される場合があり、インポートは実行時に失敗します。