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 と共に使用します。

SQL Server 2022 (16.x) 以降、R、Python、Java のランタイムは SQL セットアップでインストールされなくなりました。 代わりに、ご自分のお好きな Python のカスタム ランタイムとパッケージをインストールしてください。 詳細については、Windows への SQL Server 2022 Machine Learning Services (Python と R) のインストールに関する説明、または「Linux に SQL Server Machine Learning Services (Python と R) をインストールする」を参照してください。

前提条件

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

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

Note

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 Language Extensions setup.

  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 installation - Add Python 3.7 to PATH

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

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

    Python 3.7 installation - Install for all users

  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 言語拡張機能を使用するデータベースごとに、このステートメントを実行します。

    Note

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

前提条件

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

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

Note

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 のカスタム インストール

Note

/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 言語拡張機能を使用するデータベースごとに、このステートメントを実行します。

    Note

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

前提条件

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

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

Note

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 のカスタム インストール

Note

/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 言語拡張機能を使用するデータベースごとに、このステートメントを実行します。

    Note

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

前提条件

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

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

Note

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 のカスタム インストール

Note

/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 言語拡張機能を使用するデータベースごとに、このステートメントを実行します。

    Note

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

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

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

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

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

インストールの確認

Python カスタム ランタイムのインストールと機能を確認するには、次の SQL スクリプトを使用します。 下のサンプル スクリプトでは、myPython が言語名として使用されています。既定の言語名 Python はカスタム ランタイムとしては指定できないためです。

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

次のステップ