安裝 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 執行個體,請針對 SQL Server 2019 安裝累積更新 (CU) 3 或更新版本。
安裝語言擴充功能
注意
如果您已在 SQL Server 2019 上安裝機器學習服務,便已經安裝語言延伸模組,而且您可以跳過此步驟。
請遵循下列步驟來安裝用於 Python 自訂執行階段的 SQL Server 語言延伸模組。
啟動 SQL Server 2019 的安裝精靈。
在 [安裝] 索引標籤上,選取 [新增 SQL Server 獨立安裝或將功能加入至現有安裝] 。
在 [特徵選取] 頁面上,選取下列選項:
Database Engine 服務
若要搭配 SQL Server 使用語言延伸模組,您必須安裝資料庫引擎的執行個體。 您可以使用新的或現有的執行個體。
機器學習服務和語言延伸模組
選取 [機器學習服務和語言延伸模組]。 請勿選取 Python,因為您稍後將會安裝自訂 Python 執行階段。
在 [準備安裝] 頁面上,確認包含這些選項,然後選取 [安裝] 。
- Database Engine 服務
- 機器學習服務和語言延伸模組
安裝完成之後,如果系統要求,請重新啟動電腦。
重要
如果您安裝具有語言延伸模組的新 SQL Server 2019 執行個體,請先安裝累積更新 (CU) 3 或更新版本,再繼續進行下一個步驟。
安裝 Python
用於自訂 Python 執行階段的 Python 語言延伸模組目前僅支援 Python 3.7。 如果您想要使用不同版本的 Python,請遵循 Python 語言延伸模組 GitHub 存放庫中的指示修改並重建延伸模組。
下載適用於 Windows 的 Python 3.7 (英文),並在伺服器上執行安裝程式。
選取 [Add Python 3.7 to PATH] \(將 Python 3.7 新增至 PATH\),然後選取 [Customize installation] \(自訂安裝\)。
在 [Optional Features] \(選擇性功能\) 下,保留預設值,然後選取 [Next] \(下一步\)。
選取 [Install for all users] \(針對所有使用者安裝\),然後記下安裝位置。
選取 [安裝]。
安裝 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 安裝位置。 如果您的位置不同,請在命令中加以變更。
授與權限給 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
。授與權限給 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 服務。
開啟 SQL Server 組態管理員。
在 [SQL Server 服務] 下,以滑鼠右鍵按一下 [SQL Server Launchpad (MSSQLSERVER)],然後選取 [重新啟動]。 如果您使用的是具名執行個體,將會顯示執行個體名稱,而不是 [(MSSQLSERVER)]。
註冊語言延伸模組
遵循下列步驟來下載並註冊 Python 語言延伸模組,以用於 Python 自訂執行階段。
從 SQL Server 語言延伸模組 GitHub 存放庫 (英文) 下載 python-lang-extension-windows-release.zip 檔案。
或者,您可以在開發或測試環境中使用偵錯版本 (python-lang-extension-windows-debug.zip)。 偵錯版本提供詳細的記錄資訊以方便調查任何錯誤,且不建議用於生產環境。
使用 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 自訂執行階段之前,請先安裝:
安裝適用於 Linux 的 SQL Server 2019。 您可在 Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES) 和 Ubuntu 上安裝 SQL Server。 如需詳細資訊,請參閱 Linux 上的 SQL Server 的安裝指引。
升級至 SQL Server 2019 的累積更新 (CU) 3 或更新版本。 依照下列步驟執行:
為累積更新設定存放庫。 如需詳細資訊,請參閱設定用於安裝和升級 Linux 上 SQL Server 的存放庫。
將 mssql-server 套件更新為最新的累積更新。 如需詳細資訊,請參閱 Linux 上的 SQL Server 的安裝指引中的<更新或升級 SQL Server>一節。
安裝語言擴充功能
注意
如果您已在 SQL Server 2019 上安裝了機器學習服務,便已經安裝適用於語言延伸模組的 mssql-server-extensibility 套件,而且可以跳過此步驟。
執行以下命令以在 Ubuntu Linux 上安裝用於 Python 自訂執行階段的 SQL Server 語言延伸模組。
可能的話,請在安裝之前執行此命令以重新整理系統上的套件。
# Install as root or sudo sudo apt-get update
Ubuntu 可能沒有 HTTPs apt 傳輸選項。 若要加以安裝,請執行此命令。
# Install as root or sudo apt-get install apt-transport-https
使用此命令安裝 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 存放庫中的指示修改並重建延伸模組。
執行下列命令以安裝 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
執行下列命令以安裝 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
使用 systemctl 開啟檔案
sudo systemctl edit mssql-launchpadd
在開啟的
/etc/systemd/system/mssql-launchpadd.service.d/override.conf
檔案中插入下列文字。 將 PYTHONHOME 的值設定為自訂 Python 安裝路徑。[Service] Environment="PYTHONHOME=<path to the python3.7 lib>"
儲存檔案並關閉編輯器。
接下來,請確定可以載入 libpython3.7m.so.1.0
。
在
/etc/ld.so.conf.d
中建立 custom-python.conf 檔案。sudo vi /etc/ld.so.conf.d/custom-python.conf
在開啟的檔案中,從自訂 Python 安裝新增 libpython3.7m.so.1.0 的路徑。
<path to the python3.7 lib>
儲存新檔案並關閉編輯器。
執行下列命令,並檢查是否找得到所有相依的程式庫,以執行
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 自訂執行階段。
從 SQL Server 語言延伸模組 GitHub 存放庫 (英文) 下載 python-lang-extension-linux-release.zip 檔案。
或者,您可以在開發或測試環境中使用偵錯版本 (python-lang-extension-linux-debug.zip)。 偵錯版本提供詳細的記錄資訊以方便調查任何錯誤,且不建議用於生產環境。
使用 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 自訂執行階段之前,請先安裝:
安裝適用於 Linux 的 SQL Server 2019。 您可在 Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES) 和 Ubuntu 上安裝 SQL Server。 如需詳細資訊,請參閱 Linux 上的 SQL Server 的安裝指引。
升級至 SQL Server 2019 的累積更新 (CU) 3 或更新版本。 依照下列步驟執行:
為累積更新設定存放庫。 如需詳細資訊,請參閱設定用於安裝和升級 Linux 上 SQL Server 的存放庫。
將 mssql-server 套件更新為最新的累積更新。 如需詳細資訊,請參閱 Linux 上的 SQL Server 的安裝指引中的<更新或升級 SQL Server>一節。
安裝語言擴充功能
注意
如果您已在 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 存放庫中的指示修改並重建延伸模組。
執行下列命令以安裝 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
執行下列命令以安裝 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
使用 systemctl 開啟檔案
sudo systemctl edit mssql-launchpadd
在開啟的
/etc/systemd/system/mssql-launchpadd.service.d/override.conf
檔案中插入下列文字。 將 PYTHONHOME 的值設定為自訂 Python 安裝路徑。[Service] Environment="PYTHONHOME=<path to the python3.7 lib>"
儲存檔案並關閉編輯器。
接下來,請確定可以載入 libpython3.7m.so.1.0
。
在
/etc/ld.so.conf.d
中建立 custom-python.conf 檔案。sudo vi /etc/ld.so.conf.d/custom-python.conf
在開啟的檔案中,從自訂 Python 安裝新增 libpython3.7m.so.1.0 的路徑。
<path to the python3.7 lib>
儲存新檔案並關閉編輯器。
執行下列命令,並檢查是否找得到所有相依的程式庫,以執行
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 自訂執行階段。
從 SQL Server 語言延伸模組 GitHub 存放庫 (英文) 下載 python-lang-extension-linux-release.zip 檔案。
或者,您可以在開發或測試環境中使用偵錯版本 (python-lang-extension-linux-debug.zip)。 偵錯版本提供詳細的記錄資訊以方便調查任何錯誤,且不建議用於生產環境。
使用 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 自訂執行階段之前,請先安裝:
安裝適用於 Linux 的 SQL Server 2019。 您可在 Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES) 和 Ubuntu 上安裝 SQL Server。 如需詳細資訊,請參閱 Linux 上的 SQL Server 的安裝指引。
升級至 SQL Server 2019 的累積更新 (CU) 3 或更新版本。 依照下列步驟執行:
為累積更新設定存放庫。 如需詳細資訊,請參閱設定用於安裝和升級 Linux 上 SQL Server 的存放庫。
將 mssql-server 套件更新為最新的累積更新。 如需詳細資訊,請參閱 Linux 上的 SQL Server 的安裝指引中的<更新或升級 SQL Server>一節。
安裝語言擴充功能
注意
如果您已在 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 存放庫中的指示修改並重建延伸模組。
在伺服器上安裝 Python 3.7。
執行下列命令以安裝 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
使用 systemctl 開啟檔案
sudo systemctl edit mssql-launchpadd
在開啟的
/etc/systemd/system/mssql-launchpadd.service.d/override.conf
檔案中插入下列文字。 將 PYTHONHOME 的值設定為自訂 Python 安裝路徑。[Service] Environment="PYTHONHOME=<path to the python3.7 lib>"
儲存檔案並關閉編輯器。
接下來,請確定可以載入 libpython3.7m.so.1.0
。
在
/etc/ld.so.conf.d
中建立 custom-python.conf 檔案。sudo vi /etc/ld.so.conf.d/custom-python.conf
在開啟的檔案中,從自訂 Python 安裝新增 libpython3.7m.so.1.0 的路徑。
<path to the python3.7 lib>
儲存新檔案並關閉編輯器。
執行下列命令,並檢查是否找得到所有相依的程式庫,以執行
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 自訂執行階段。
從 SQL Server 語言延伸模組 GitHub 存放庫 (英文) 下載 python-lang-extension-linux-release.zip 檔案。
或者,您可以在開發或測試環境中使用偵錯版本 (python-lang-extension-linux-debug.zip)。 偵錯版本提供詳細的記錄資訊以方便調查任何錯誤,且不建議用於生產環境。
使用 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)'