4.2 オンプレミス・データベース用のPython for Linuxの構築およびインストール

オンプレミスOracleデータベース用にPython for Linuxをインストールする手順です。

データベース・サーバーへのPythonのインストールは、Oracleユーザーが実行する必要があります(sudoやrootではなく、その他のユーザーでもない)。ただし、OML4Pyクライアントの場合、これは要件ではありません。

OML4Pyをインストールして使用するには、Python 3.12.0が必要です。

Oracle Linux 7でのPythonのビルドとインストール

次のステップでは、Oracle Linux 7でのPython 3.12.0のビルドとインストールについて説明します。

  1. Python 3.12には、OpenSSL 3.0.12が必要です。これは、Linux 7でソースからインストールする必要があります。OpenSSSL source tarballをダウンロードします。
    wget https://www.openssl.org/source/old/3.0/openssl-3.0.12.tar.gz 
    1. Perlモジュールperl-IPC-Cmdおよびperl-Digest-SHAをインストールします(存在しない場合)。
      1. 次のコマンドを実行して、それらのモジュールがすでにシステムにインストールされているかどうかを確認します:
        rpm -qa perl-IPC-Cmd
        rpm -qa perl-Digest-SHA
        これらのコマンドでperl-IPC-Cmd-1.02-1.el7.noarchperl-Digest-SHA-6.02-1.el7.x86_64などの出力が返された場合、それは、それらのモジュールがインストールされているということです。
      2. 値が返されない場合、それらのモジュールはシステムに存在せず、sudoまたはrootとしてインストールする必要があります。次のコマンドを実行してそれらをインストールします:
        sudo yum install perl-IPC-Cmd perl-Digest-SHA
    2. OpenSSLアーカイブを展開します。opensslディレクトリ内にdistという名前のサブディレクトリを作成します。opensslディレクトリに移動します。
      tar -xvzf openssl-3.0.12.tar.gz
      cd openssl-3.0.12
      mkdir dist
      export OPENSSL_HOME=<full-path-to-openssl-3.0.12>
    3. 次のコマンドによってconfigureとmakeを実行します。
      ./Configure enable-fips --prefix=$OPENSSL_HOME/dist/openssl --openssldir=$OPENSSL_HOME/dist/ssl
      make clean; make
      make install
    4. OpenSSLライブラリが正常にコンパイルされているかどうかと、それらを含むopensslフォルダが作成されているかどうかを確認します。
      ls dist/openssl/lib64
      engines-3/ libcrypto.so  libssl.a   libssl.so.3 pkgconfig/ 
      libcrypto.a libcrypto.so.3 libssl.so ossl-modules/
      
      ls dist/ssl
      certs/           ct_log_list.cnf.dist misc/            openssl.cnf.dist
      ct_log_list.cnf  fipsmodule.cnf   openssl.cnf      private/
  2. Python 3.12.0 source tarballをダウンロードします。
    wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz 
    1. 続行する前に、すでにPythonインストールがあるかどうかを確認します。
      1. pythonというフォルダを$ORACLE_HOME内で探します。
      2. pythonフォルダが見つからない場合は、ステップ2.2に進みます。
      3. フォルダが見つかった場合は、新しいインストールとの競合を避けるために、既存のフォルダの名前を変更します。たとえば、次のようになります。
        mv $ORACLE_HOME/python $ORACLE_HOME/python-old
    2. ディレクトリ$ORACLE_HOME/pythonを作成し、このディレクトリにそのtarballの内容を展開します:
      mkdir -p $ORACLE_HOME/python 
      tar -xvzf Python-3.12.0.tgz --strip-components=1 -C $ORACLE_HOME/python
      Gzipped source tarballの内容は、$ORACLE_HOME/pythonに直接コピーされ展開されます。
    3. PYTHONHOME環境変数を作成し、ディレクトリを次のように変更します:
      export PYTHONHOME=$ORACLE_HOME/python 
      cd $PYTHONHOME
    4. opensslライブラリをpythonフォルダにコピーします。
      mkdir $PYTHON_HOME/include $PYTHONHOME/ssl
      cp -r $OPENSSL_HOME/dist/openssl/lib64/* $PYTHONHOME/lib
      cp -r $OPENSSL_HOME/dist/ssl/* $PYTHONHOME/ssl
      cp -r $OPENSSL_HOME/include/openssl $PYTHONHOME/include
    5. 新しいディレクトリに移動します。
      cd $ORACLE_HOME/python
    6. OML4Pyには、perl-Envlibffi-developensslopenssl-develtk-develxz-develzlib-develbzip2-develreadline-devellibuuid-develおよびncurses-develの各ライブラリが存在する必要があります。これらのパッケージをsudoまたはrootユーザーとしてインストールします:
      sudo yum install perl-Env libffi-devel openssl openssl-devel tk-devel xz-devel zlib-devel bzip2-devel readline-devel libuuid-devel ncurses-devel
    7. Pythonをコンパイルしインストールします。
      ./Configure --enable-shared OPT='-fwrapv -O3 -Wall' --prefix=$PYTHONHOME --with-openssl=$PYTHONHOME --with-openssl-rpath=$PYTHONHOME/lib
      make clean; make
      make altinstall
    8. $PYTHONHOME/binディレクトリにpython3.12実行可能ファイルへのシンボリック・リンクを作成します

      ln -s $PYTHONHOME/bin/python3.12 $PYTHONHOME/bin/python3

      ノート:

      Embedded Python Executionを使用する場合は、必ず--enable-sharedフラグを使用してください。そうしないと、Embedded Python Execution関数を使用したときにextprocエラーが発生します。

      必ずmake installではなくmake altinstallを呼び出して、システムPythonの上書きを回避してください。

    9. Pythonライブラリを使用可能にし、パスにPython3.12 binフォルダを追加します。
      export LD_LIBRARY_PATH=$PYTHONHOME/lib:$LD_LIBRARY_PATH 
      export PATH=$PYTHONHOME/bin:$PATH
    10. Pythonが正しくコンパイルされたことを確認します。
      python3
      Python 3.12.0 (main, Apr  5 2024, 18:58:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44.0.3)] on linux Type "help", "copyright", "credits" or "license" for more information.
      import ssl
      ssl.OPENSSL_VERSION
      'OpenSSL 3.0.12 24 Oct 2023'

Oracle Linux 8でのPythonのビルドとインストール

次のステップでは、Oracle Linux 8でのPython 3.12.0のビルドとインストールについて説明します。

  1. Python 3.12.0 source tarballをダウンロードします。
    wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
  2. ディレクトリ$ORACLE_HOME/pythonを作成し、このディレクトリに内容を抽出します。
    mkdir -p $ORACLE_HOME/python
    tar -xvzf Python-3.12.0.tgz --strip-components=1 -C $ORACLE_HOME/python

    Gzipped source tarballの内容は、$ORACLE_HOME/pythonに直接コピーされます

  3. 新しいディレクトリに移動します。
    cd $ORACLE_HOME/python
  4. OML4Pyには、perl-Envlibffi-developensslopenssl-develtk-develxz-develzlib-develbzip2-develreadline-devellibuuid-develおよびncurses-develの各ライブラリが存在する必要があります。これらのパッケージをsudoまたはrootユーザーとしてインストールします:
    sudo yum install perl-Env libffi-devel openssl openssl-devel tk-devel xz-devel zlib-devel bzip2-devel readline-devel libuuid-devel ncurses-devel
  5. Python 3.12.0をビルドするには、次のコマンドを入力します(ここでのPREFIXは、Python-3.12.0をインストールしたディレクトリです)。Oracle Machine Learning for Pythonサーバーでのコマンドは次のとおりです。
    cd $ORACLE_HOME/python
    ./Configure --enable-shared --prefix=$ORACLE_HOME/python
    
    make clean; make
    make altinstall

    ノート:

    Embedded Python Executionを使用する場合は、必ず--enable-sharedフラグを使用してください。そうしないと、Embedded Python Execution関数を使用したときにextprocエラーが発生します。

    必ずmake installではなくmake altinstallを呼び出して、システムPythonの上書きを回避してください。

  6. 環境変数PYTHONHOMEを設定してPATHに追加し、環境変数LD_LIBRARY_PATHを設定します。
    export PYTHONHOME=$ORACLE_HOME/python
    export PATH=$PYTHONHOME/bin:$PATH
    export LD_LIBRARY_PATH=$PYTHONHOME/lib:$LD_LIBRARY_PATH

    ノート:

    OML4PyのためにPythonを使用するには、これらの変数を設定する必要があり、これらの変数はPATHおよびLD_LIBRARY_PATHでシステムPythonの前に指定する必要があります。
  7. $ORACLE_HOME/python/binディレクトリにシンボリック・リンクを作成してpython3.12実行可能ファイルにリンクします。これは、次のコマンドを使用して実行できます:
    cd $ORACLE_HOME/python/bin
    ln -s python3.12 python3

    最新バージョンがインストールされていない場合は、パッケージのインストール中にpipから警告が返されます。pipのバージョンをアップグレードしてこのような警告を回避できます。

    python3 -m pip install --upgrade pip

Oracle Linux 7およびOracle Linux 8の両方について

これで、コマンドpython3を実行してPythonを起動できます。Pythonがインストールされているディレクトリを確認するには、sysパッケージのsys.executableコマンドを使用します。たとえば、次のようになります。

python3
Python 3.12.0 (default, Feb 22 2022, 15:13:36)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44.0.3)] on linux
Type "help", "copyright", "credits" or "license" for more information.

import sys
print(sys.executable)
/u01/app/oracle/product/19.3/dbhome_1/python/bin/python3

この例では、Python実行可能バイナリの絶対パスを返します。

コマンドpython3を実行して、エラーcommand not foundが表示された場合は、python3という実行可能ファイルが$PYTHONHOME/binで見つからないことを意味します。OML4Pyサーバー・インストール・コンポーネントにはシンボリック・リンクが必要です。そのため、その場合は、ステップ6の説明に従って、PREFIX/binディレクトリにシンボリック・リンクを作成してpython3.12実行可能ファイルにリンクする必要があります。