SQL Server 用の Python カスタム ランタイムをインストールする

適用対象: はいSQL Server 2019 (15.x)

SQL Server で外部 Python スクリプトを実行するための Python カスタム ランタイムをインストールする方法について説明します。

  • Windows
  • Ubuntu Linux
  • Red Hat Enterprise Linux (RHEL)
  • SUSE Linux Enterprise Server (SLES)

カスタム ランタイムは、機械学習スクリプトを実行することができ、SQL Server 言語拡張機能を使用します。

SQL Server Machine Learning Services と共にインストールされる既定のランタイム バージョンではなく、独自のバージョンの Python ランタイムを SQL Server と共に使用します。

前提条件

Python カスタム ランタイムをインストールする前に、次のものをインストールします。

言語拡張をインストールする

注意

SQL Server 2019 に Machine Learning Services がインストールされている場合は、言語拡張機能が既にインストールされているため、この手順は省略できます。

SQL Server 言語拡張機能 (Python カスタム ランタイムに使用されるもの) をインストールするには、次の手順に従います。

  1. SQL Server 2019 のセットアップ ウィザードを開始します。

  2. [インストール] タブで、 [SQL Server の新規スタンドアロン インストールを実行するか、既存のインストールに機能を追加します] を選択します。

  3. [機能の選択] ページで、次のオプションを選択します。

    • データベース エンジン サービス

      SQL Server で言語拡張を使用するには、データベース エンジンのインスタンスをインストールする必要があります。 新規または既存のインスタンスのいずれかを使用できます。

    • Machine Learning Services および言語の拡張

      [Machine Learning Services および言語の拡張] を選択します。 後でカスタム Python ランタイムをインストールするので、Python は選択しないでください。

      SQL Server 2019 言語拡張機能のセットアップ。

  4. [インストールの準備完了] ページで、以下が選択されていることを確認した後、 [インストール] を選択します。

    • データベース エンジン サービス
    • Machine Learning Services および言語の拡張
  5. セットアップが完了した後、確認のメッセージが表示されたらコンピューターを再起動します。

重要

言語拡張機能を使用して SQL Server 2019 の新規インスタンスをインストールする場合は、次の手順に進む前に、累積的な更新プログラム (CU) 3 以降をインストールしてください。

Python のインストール

カスタム Python ランタイムに使用される Python 言語拡張機能は、現在、Python 3.7 のみをサポートしています。 別のバージョンの Python を使用する場合は、Python 言語拡張機能の GitHub リポジトリの指示に従って、拡張機能を変更し、再構築してください。

  1. Windows 用の Python 3.7 をダウンロードし、サーバーでセットアップを実行します。

  2. [Add Python 3.7 to PATH](Python 3.7 を PATH に追加) を選択し、 [インストールをカスタマイズする] を選択します。

    Python 3.7 のインストール - Python 3.7 を PATH に追加する

  3. [オプション機能] は既定値をそのまま使用して、 [次へ] を選択します。

  4. [すべてのユーザーに対してインストール] を選択し、インストールの場所を記録しておきます。

    Python 3.7 のインストール - すべてのユーザーに対してインストール

  5. [インストール] を選択します。

pandas をインストールする

"管理者特権" でのコマンド プロンプトから (管理者として実行)、Python 用の pandas パッケージをインストールします。

python.exe -m pip install pandas

Python フォルダーへのアクセスを許可する

新しい "管理者特権" でのコマンド プロンプトから次の icacls コマンドを実行して、Python のインストール場所への 読み取りと実行 のアクセス権を、SQL Server Launchpad サービス と SID S-1-15-2-1 (ALL_APPLICATION_PACKAGES) に付与します。

次の例では、Python のインストール場所として C:\Program Files\Python37 を使用します。 お使いの場所が異なる場合は、コマンドでそれを変更します。

  1. SQL Server Launchpad サービスのユーザー名 にアクセス許可を付与します。

    icacls "C:\Program Files\Python37" /grant "NT Service\MSSQLLAUNCHPAD":(OI)(CI)RX /T
    

    名前付きインスタンスの場合、SQL01 というインスタンスに対するコマンドは icacls "C:\Program Files\Python37" /grant "NT Service\MSSQLLAUNCHPAD$SQL01":(OI)(CI)RX /T になります。

  2. SID S-1-15-2-1 にアクセス許可を付与します。

    icacls "C:\Program Files\Python37" /grant *S-1-15-2-1:(OI)(CI)RX /T
    

    上記のコマンドを実行すると、コンピューター SID S-1-15-2-1 にアクセス許可が付与されます。これは、英語版の Windows における ALL APPLICATION PACKAGES と同等です。 または、英語版の Windows で icacls "C:\Program Files\Python37" /grant "ALL APPLICATION PACKAGES":(OI)(CI)RX /T を使用することもできます。

SQL Server Launchpad を再起動する

SQL Server Launchpad サービスを再起動するには、次の手順に従います。

  1. [SQL Server 構成マネージャー] を開きます。

  2. [SQL Server サービス][SQL Server Launchpad (MSSQLSERVER)] を右クリックして、 [再起動] を選択します。 名前付きインスタンスを使用している場合は、 (MSSQLSERVER) の代わりにインスタンス名が表示されます。

言語拡張機能を登録する

Python 言語拡張機能 (Python カスタム ランタイムに使用されるもの) をダウンロードして登録するには、次の手順に従います。

  1. SQL Server 言語拡張機能の GitHub リポジトリから python-lang-extension-windows-release.zip ファイルをダウンロードします。

    開発環境やテスト環境では、デバッグ バージョン (python-lang-extension-windows-debug.zip) を使用することもできます。 デバッグ バージョンでは、エラーを調査するための詳細なログ情報が提供されます。これは運用環境では推奨されません。

  2. Azure Data Studio を使用して SQL Server インスタンスに接続し、次の T-SQL コマンドを実行して、Python 言語拡張機能を CREATE EXTERNAL LANGUAGE に登録します。

    このステートメントのパスを変更して、ダウンロードした言語拡張機能の zip ファイルの場所 (python-lang-extension-windows-release.zip) と Python インストールの場所 (C:\\Program Files\\Python37) を反映します。

    CREATE EXTERNAL LANGUAGE [myPython]
    FROM (CONTENT = N'C:\path\to\python-lang-extension-windows-release.zip', 
        FILE_NAME = 'pythonextension.dll', 
        ENVIRONMENT_VARIABLES = N'{"PYTHONHOME": "C:\\Program Files\\Python37"}');
    GO
    

    Python 言語拡張機能を使用するデータベースごとに、このステートメントを実行します。

    注意

    Python は予約語であり、新しい外部言語の名前として使用することはできません。 別の名前を使用してください。 たとえば、上記のステートメントでは myPython が使用されています。

前提条件

Python カスタム ランタイムをインストールする前に、次のものをインストールします。

言語拡張をインストールする

注意

SQL Server 2019 に Machine Learning Services がインストールされている場合は、言語拡張機能用の mssql-server-extensibility パッケージが既にインストールされているため、この手順は省略できます。

次のコマンドを実行して、Python カスタム ランタイムに使用される Ubuntu Linux に SQL Server 言語拡張機能をインストールします。

  1. 可能であれば、次のコマンドを実行して、インストールの前にシステム上のパッケージを更新しておきます。

    # Install as root or sudo
    sudo apt-get update
    
  2. Ubuntu には、https apt transport オプションがない可能性があります。 これをインストールするには、次のコマンドを実行します。

    # Install as root or sudo
    apt-get install apt-transport-https
    
  3. 次のコマンドを使用して mssql-server-extensibility をインストールします。

    # Install as root or sudo
    sudo apt-get install mssql-server-extensibility
    

Python 3.7 と pandas をインストールする

Python カスタム ランタイムに使用される Python 言語拡張機能では、現在、Python 3.7 のみがサポートされています。 別のバージョンの Python を使用する場合は、Python 言語拡張機能の GitHub リポジトリの指示に従って、拡張機能を変更し、再構築してください。

  1. 次のコマンドを実行して、Python 3.7 をインストールします。

    # Install python3.7 and the corresponding library:
    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt-get update
    sudo apt-get install python3.7 python3-pip libpython3.7
    
  2. 次のコマンドを実行して、pandas パッケージをインストールします。

    # Install pandas to /usr/lib:
    sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages
    

Python のカスタム インストール

注意

/usr/lib/python3.7 の既定の場所に Python 3.7 がインストールされている場合は、このセクションをスキップし、「言語拡張機能を登録する」セクションに進むことができます。

独自のバージョンの Python 3.7 をビルドした場合は、次のコマンドを使用して、SQL Server にカスタム インストールを把握させます。

環境変数を追加する

まず、mssql-launchpadd サービスを編集して、PYTHONHOME 環境変数を /etc/systemd/system/mssql-launchpadd.service.d/override.conf ファイルに追加します

  1. systemctl を使用してファイルを開きます

    sudo systemctl edit mssql-launchpadd
    
  2. 開かれた /etc/systemd/system/mssql-launchpadd.service.d/override.conf ファイルに、次のテキストを挿入します。 PYTHONHOME の値をカスタムの Python インストール パスに設定します。

    [Service]
    Environment="PYTHONHOME=<path to the python3.7 lib>"
    
  3. ファイルを保存して、エディターを閉じます。

次に、libpython3.7m.so.1.0 を読み込めることを確認します。

  1. /etc/ld.so.conf.d 内に custom-python.conf ファイルを作成します。

    sudo vi /etc/ld.so.conf.d/custom-python.conf
    
  2. 開かれたファイルに、カスタムの Python インストールから libpython3.7m.so.1.0 へのパスを追加します。

    <path to the python3.7 lib>
    
  3. 新しいファイルを保存し、エディターを閉じます。

  4. ldconfig を実行し、次のコマンドを実行することで libpython3.7m.so.1.0 を読み込めることを確認し、すべての依存ライブラリが見つかることを確認します。

    sudo ldconfig
    ldd <path to the python3.7 lib>/libpython3.7m.so.1.0
    

Python フォルダーへのアクセスを許可する

/var/opt/mssql/mssql.conf ファイルの extensibility セクションにある datadirectories オプションを、カスタム Python のインストールに設定します。

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to python3.7>

Mssql-launchpadd を再起動する

次のコマンドを実行して、mssql-launchpadd を再起動します。

sudo systemctl restart mssql-launchpadd

言語拡張機能を登録する

Python 言語拡張機能 (Python カスタム ランタイムに使用されるもの) をダウンロードして登録するには、次の手順に従います。

  1. SQL Server 言語拡張機能の GitHub リポジトリから python-lang-extension-linux-release.zip ファイルをダウンロードします。

    開発環境やテスト環境では、デバッグ バージョン (python-lang-extension-linux-debug.zip) を使用することもできます。 デバッグ バージョンでは、エラーを調査するための詳細なログ情報が提供されます。これは運用環境では推奨されません。

  2. Azure Data Studio を使用して SQL Server インスタンスに接続し、次の T-SQL コマンドを実行して、Python 言語拡張機能を CREATE EXTERNAL LANGUAGE に登録します。

    このステートメントのパスを変更して、ダウンロードした言語拡張機能の zip ファイル (python-lang-extension-linux-release.zip) の場所を反映します。

    CREATE EXTERNAL LANGUAGE [myPython]
    FROM (CONTENT = N'/path/to/python-lang-extension-linux-release.zip', FILE_NAME = 'libPythonExtension.so.1.1');
    GO
    

    Python 言語拡張機能を使用するデータベースごとに、このステートメントを実行します。

    注意

    Python は予約語であり、新しい外部言語の名前として使用することはできません。 別の名前を使用してください。 たとえば、上記のステートメントでは myPython が使用されています。

前提条件

Python カスタム ランタイムをインストールする前に、次のものをインストールします。

言語拡張をインストールする

注意

SQL Server 2019 に Machine Learning Services がインストールされている場合は、言語拡張機能用の mssql-server-extensibility パッケージが既にインストールされているため、この手順は省略できます。

次のコマンドを実行して、Python カスタム ランタイムに使用される Red Hat Enterprise Linux (RHEL) に SQL Server 言語拡張機能をインストールします。

# Install as root or sudo
sudo yum install mssql-server-extensibility

Python 3.7 と pandas をインストールする

Python カスタム ランタイムに使用される Python 言語拡張機能では、現在、Python 3.7 のみがサポートされています。 別のバージョンの Python を使用する場合は、Python 言語拡張機能の GitHub リポジトリの指示に従って、拡張機能を変更し、再構築してください。

  1. 次のコマンドを実行して、Python 3.7 をインストールします。

    # Install python3.7 and the corresponding library:
    yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel
    
    cd /usr/src
    wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
    tar xzf Python-3.7.9.tgz
    
    cd Python-3.7.9
    ./configure --enable-optimizations --prefix=/usr
    make altinstall
    
  2. 次のコマンドを実行して、pandas パッケージをインストールします。

    # Install pandas to /usr/lib:
    sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages
    

Python のカスタム インストール

注意

/usr/lib/python3.7 の既定の場所に Python 3.7 がインストールされている場合は、このセクションをスキップし、「言語拡張機能を登録する」セクションに進むことができます。

独自のバージョンの Python 3.7 をビルドした場合は、次のコマンドを使用して、SQL Server にカスタム インストールを把握させます。

環境変数を追加する

まず、mssql-launchpadd サービスを編集して、PYTHONHOME 環境変数を /etc/systemd/system/mssql-launchpadd.service.d/override.conf ファイルに追加します

  1. systemctl を使用してファイルを開きます

    sudo systemctl edit mssql-launchpadd
    
  2. 開かれた /etc/systemd/system/mssql-launchpadd.service.d/override.conf ファイルに、次のテキストを挿入します。 PYTHONHOME の値をカスタムの Python インストール パスに設定します。

    [Service]
    Environment="PYTHONHOME=<path to the python3.7 lib>"
    
  3. ファイルを保存して、エディターを閉じます。

次に、libpython3.7m.so.1.0 を読み込めることを確認します。

  1. /etc/ld.so.conf.d 内に custom-python.conf ファイルを作成します。

    sudo vi /etc/ld.so.conf.d/custom-python.conf
    
  2. 開かれたファイルに、カスタムの Python インストールから libpython3.7m.so.1.0 へのパスを追加します。

    <path to the python3.7 lib>
    
  3. 新しいファイルを保存し、エディターを閉じます。

  4. ldconfig を実行し、次のコマンドを実行することで libpython3.7m.so.1.0 を読み込めることを確認し、すべての依存ライブラリが見つかることを確認します。

    sudo ldconfig
    ldd <path to the python3.7 lib>/libpython3.7m.so.1.0
    

Python フォルダーへのアクセスを許可する

/var/opt/mssql/mssql.conf ファイルの extensibility セクションにある datadirectories オプションを、カスタム Python のインストールに設定します。

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to python3.7>

Mssql-launchpadd を再起動する

次のコマンドを実行して、mssql-launchpadd を再起動します。

sudo systemctl restart mssql-launchpadd

言語拡張機能を登録する

Python 言語拡張機能 (Python カスタム ランタイムに使用されるもの) をダウンロードして登録するには、次の手順に従います。

  1. SQL Server 言語拡張機能の GitHub リポジトリから python-lang-extension-linux-release.zip ファイルをダウンロードします。

    開発環境やテスト環境では、デバッグ バージョン (python-lang-extension-linux-debug.zip) を使用することもできます。 デバッグ バージョンでは、エラーを調査するための詳細なログ情報が提供されます。これは運用環境では推奨されません。

  2. Azure Data Studio を使用して SQL Server インスタンスに接続し、次の T-SQL コマンドを実行して、Python 言語拡張機能を CREATE EXTERNAL LANGUAGE に登録します。

    このステートメントのパスを変更して、ダウンロードした言語拡張機能の zip ファイル (python-lang-extension-linux-release.zip) の場所を反映します。

    CREATE EXTERNAL LANGUAGE [myPython]
    FROM (CONTENT = N'/path/to/python-lang-extension-linux-release.zip', FILE_NAME = 'libPythonExtension.so.1.1');
    GO
    

    Python 言語拡張機能を使用するデータベースごとに、このステートメントを実行します。

    注意

    Python は予約語であり、新しい外部言語の名前として使用することはできません。 別の名前を使用してください。 たとえば、上記のステートメントでは myPython が使用されています。

前提条件

Python カスタム ランタイムをインストールする前に、次のものをインストールします。

言語拡張をインストールする

注意

SQL Server 2019 に Machine Learning Services がインストールされている場合は、言語拡張機能用の mssql-server-extensibility パッケージが既にインストールされているため、この手順は省略できます。

次のコマンドを実行して、Python カスタム ランタイムに使用される SUSE Linux Enterprise Server (SLES) に SQL Server 言語拡張機能をインストールします。

# Install as root or sudo
sudo zypper install mssql-server-extensibility

Python 3.7 と pandas をインストールする

Python カスタム ランタイムに使用される Python 言語拡張機能では、現在、Python 3.7 のみがサポートされています。 別のバージョンの Python を使用する場合は、Python 言語拡張機能の GitHub リポジトリの指示に従って、拡張機能を変更し、再構築してください。

  1. Python 3.7 をサーバーにインストールします。

  2. 次のコマンドを実行して、pandas パッケージをインストールします。

    # Install pandas to /usr/lib:
    sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages
    

Python のカスタム インストール

注意

/usr/lib/python3.7 の既定の場所に Python 3.7 がインストールされている場合は、このセクションをスキップし、「言語拡張機能を登録する」セクションに進むことができます。

独自のバージョンの Python 3.7 をビルドした場合は、次のコマンドを使用して、SQL Server にカスタム インストールを把握させます。

環境変数を追加する

まず、mssql-launchpadd サービスを編集して、PYTHONHOME 環境変数を /etc/systemd/system/mssql-launchpadd.service.d/override.conf ファイルに追加します

  1. systemctl を使用してファイルを開きます

    sudo systemctl edit mssql-launchpadd
    
  2. 開かれた /etc/systemd/system/mssql-launchpadd.service.d/override.conf ファイルに、次のテキストを挿入します。 PYTHONHOME の値をカスタムの Python インストール パスに設定します。

    [Service]
    Environment="PYTHONHOME=<path to the python3.7 lib>"
    
  3. ファイルを保存して、エディターを閉じます。

次に、libpython3.7m.so.1.0 を読み込めることを確認します。

  1. /etc/ld.so.conf.d 内に custom-python.conf ファイルを作成します。

    sudo vi /etc/ld.so.conf.d/custom-python.conf
    
  2. 開かれたファイルに、カスタムの Python インストールから libpython3.7m.so.1.0 へのパスを追加します。

    <path to the python3.7 lib>
    
  3. 新しいファイルを保存し、エディターを閉じます。

  4. ldconfig を実行し、次のコマンドを実行することで libpython3.7m.so.1.0 を読み込めることを確認し、すべての依存ライブラリが見つかることを確認します。

    sudo ldconfig
    ldd <path to the python3.7 lib>/libpython3.7m.so.1.0
    

Python フォルダーへのアクセスを許可する

/var/opt/mssql/mssql.conf ファイルの extensibility セクションにある datadirectories オプションを、カスタム Python のインストールに設定します。

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to python3.7>

Mssql-launchpadd を再起動する

次のコマンドを実行して、mssql-launchpadd を再起動します。

sudo systemctl restart mssql-launchpadd

言語拡張機能を登録する

Python 言語拡張機能 (Python カスタム ランタイムに使用されるもの) をダウンロードして登録するには、次の手順に従います。

  1. SQL Server 言語拡張機能の GitHub リポジトリから python-lang-extension-linux-release.zip ファイルをダウンロードします。

    開発環境やテスト環境では、デバッグ バージョン (python-lang-extension-linux-debug.zip) を使用することもできます。 デバッグ バージョンでは、エラーを調査するための詳細なログ情報が提供されます。これは運用環境では推奨されません。

  2. Azure Data Studio を使用して SQL Server インスタンスに接続し、次の T-SQL コマンドを実行して、Python 言語拡張機能を CREATE EXTERNAL LANGUAGE に登録します。

    このステートメントのパスを変更して、ダウンロードした言語拡張機能の zip ファイル (python-lang-extension-linux-release.zip) の場所を反映します。

    CREATE EXTERNAL LANGUAGE [myPython]
    FROM (CONTENT = N'/path/to/python-lang-extension-linux-release.zip', FILE_NAME = 'libPythonExtension.so.1.1');
    GO
    

    Python 言語拡張機能を使用するデータベースごとに、このステートメントを実行します。

    注意

    Python は予約語であり、新しい外部言語の名前として使用することはできません。 別の名前を使用してください。 たとえば、上記のステートメントでは myPython が使用されています。

外部スクリプトを有効にする

Python 外部スクリプトは、ストアド プロシージャ sp_execute_external_script を使用して実行できます。

外部スクリプトを有効にするには、Azure Data Studio を使用して次のステートメントを実行します。

sp_configure 'external scripts enabled', 1;
RECONFIGURE WITH OVERRIDE;  

インストールの確認

Python カスタム ランタイムのインストールと機能を確認するには、次の SQL スクリプトを使用します。

EXEC sp_execute_external_script
@language =N'myPython',
@script=N'
import sys
print(sys.path)
print(sys.version)
print(sys.executable)'

次のステップ