安裝 SQL Server 適用的 Python 自訂執行階段

適用於: SQL Server 2019 (15.x)

了解如何安裝 Python 自訂執行階段,以在下列項目上使用 SQL Server 執行外部 Python 指令碼:

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

自訂執行階段可以執行機器學習指令碼,並使用 SQL Server 語言延伸模組

搭配 SQL Server 使用您自己的 Python 執行階段版本,而不是使用隨 SQL Server 機器學習服務服務一起安裝的預設執行階段版本。

從 SQL Server 2022 (16.x) 開始,適用於 R、Python 和 JAVA 的執行階段將不再隨 SQL 安裝程式一起安裝。 相反地,請安裝您所需的 Python 自訂執行階段和套件。 如需詳細資訊,請參閱在 Windows 上安裝 SQL Server 2022 機器學習服務 (Python 和 R)在 Linux 上安裝 SQL Server 機器學習服務 (Python 和 R)

必要條件

安裝 Python 自訂執行階段之前,請先安裝:

安裝語言擴充功能

注意

如果您已在 SQL Server 2019 上安裝機器學習服務,便已經安裝語言延伸模組,而且您可以跳過此步驟。

請遵循下列步驟來安裝用於 Python 自訂執行階段的 SQL Server 語言延伸模組

  1. 啟動 SQL Server 2019 的安裝精靈。

  2. 在 [安裝] 索引標籤上,選取 [新增 SQL Server 獨立安裝或將功能加入至現有安裝] 。

  3. 在 [特徵選取] 頁面上,選取下列選項:

    • Database Engine 服務

      若要搭配 SQL Server 使用語言延伸模組,您必須安裝資料庫引擎的執行個體。 您可以使用新的或現有的執行個體。

    • 機器學習服務和語言延伸模組

      選取 [機器學習服務和語言延伸模組]。 請勿選取 Python,因為您稍後將會安裝自訂 Python 執行階段。

      SQL Server 2019 Language Extensions setup.

  4. 在 [準備安裝] 頁面上,確認包含這些選項,然後選取 [安裝] 。

    • Database Engine 服務
    • 機器學習服務和語言延伸模組
  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\),然後選取 [Customize installation] \(自訂安裝\)。

    Python 3.7 installation - Add Python 3.7 to PATH

  3. 在 [Optional Features] \(選擇性功能\) 下,保留預設值,然後選取 [Next] \(下一步\)。

  4. 選取 [Install for all users] \(針對所有使用者安裝\),然後記下安裝位置。

    Python 3.7 installation - Install for all users

  5. 選取 [安裝]。

安裝 pandas

從「已提升權限」的命令提示字元 (以系統管理員身分執行) 安裝適用於 Python 的 pandas (英文) 套件:

python.exe -m pip install pandas

授與 Python 資料夾的存取權

提升權限的命令提示字元執行下列 icacls 命令,將 Python 安裝位置的「讀取並執行」存取權授與 SQL Server Launchpad 服務S-1-15-2-1 (ALL_APPLICATION_PACKAGES)。

下列範例使用 C:\Program Files\Python37 作為 Python 安裝位置。 如果您的位置不同,請在命令中加以變更。

  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 上的所有應用程式套件。 或者,您也可以在英文版的 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 語言延伸模組。

    修改此陳述式中的路徑,以反映所下載語言延伸模組 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 上安裝了機器學習服務,便已經安裝適用於語言延伸模組的 mssql-server-extensibility 套件,而且可以跳過此步驟。

執行以下命令以在 Ubuntu Linux 上安裝用於 Python 自訂執行階段的 SQL Server 語言延伸模組

  1. 可能的話,請在安裝之前執行此命令以重新整理系統上的套件。

    # Install as root or sudo
    sudo apt-get update
    
  2. Ubuntu 可能沒有 HTTPs apt 傳輸選項。 若要加以安裝,請執行此命令。

    # 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 檔案的擴充性區段中,將 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 語言延伸模組。

    修改此陳述式中的路徑,以反映已下載之語言延伸模組 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 上安裝了機器學習服務,便已經安裝適用於語言延伸模組的 mssql-server-extensibility 套件,而且可以跳過此步驟。

執行以下命令以在 Red Hat Enterprise Linux (RHEL) 上安裝用於 Python 自訂執行階段的 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 檔案的擴充性區段中,將 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 語言延伸模組。

    修改此陳述式中的路徑,以反映已下載之語言延伸模組 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 上安裝了機器學習服務,便已經安裝適用於語言延伸模組的 mssql-server-extensibility 套件,而且可以跳過此步驟。

執行下列命令以在 SUSE Linux Enterprise Server (SLES) 上安裝用於 Python 自訂執行階段的 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 檔案的擴充性區段中,將 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 語言延伸模組。

    修改此陳述式中的路徑,以反映已下載之語言延伸模組 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

啟用外部指令碼

您可以使用預存程序 sp_execute_external script 執行 Python 外部指令碼。

若要啟用外部指令碼,請使用 Azure Data Studio 來執行下面的陳述式。

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

確認安裝

使用下列 SQL 指令碼來確認 Python 自訂執行階段的安裝與功能。 在下列範例指令碼中,myPython 是用來作為語言名稱,因為無法為自訂執行階段提供預設語言名稱 Python

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

後續步驟