为 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 语言扩展。
可以将自己的 Python 运行时版本与 SQL Server 一起使用,而不是使用随 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 上安装机器学习服务,则已安装语言扩展,可以跳过此步骤。
按照以下步骤安装 SQL Server 语言扩展,该扩展用于 Python 自定义运行时。
启动 SQL Server 2019 的安装向导。
在“安装”选项卡上,选择“全新 SQL Server 独立安装或向现有安装添加功能” 。
在“功能选择” 页上,选择以下选项:
数据库引擎服务
要将语言扩展与 SQL Server 结合使用,必须安装数据库引擎的实例。 可以使用新的或现有实例。
机器学习服务和语言扩展
选择“机器学习服务和语言扩展”。 请勿选择 Python,因为稍后将安装自定义 Python 运行时。
在“准备安装”页面上,验证是否已包括这些选择,然后选择“安装” 。
- 数据库引擎服务
- 机器学习服务和语言扩展
安装完成后,重新启动计算机(如果要求这样做)。
重要
如果使用语言扩展安装 SQL Server 2019 的新实例,则在继续下一步之前,请安装累积更新 (CU) 3 或更高版本。
安装 Python
用于自定义 Python 运行时的 Python 语言扩展目前仅支持 Python 3.7。 如果要使用不同版本的 Python,请按照 Python 语言扩展 GitHub 存储库中的说明来修改和重新生成扩展。
下载适用于 Windows 的 Python 3.7,并在服务器上运行安装程序。
选择“将 Python 3.7 添加到 PATH”,然后选择“自定义安装”。
在“可选功能”下,保留默认值并选择“下一步”。
选择“为所有用户安装”并记下安装位置。
选择“安装” 。
安装 pandas
从权限已提升的命令提示符下安装适用于 Python 的 pandas 包(以管理员身份运行):
python.exe -m pip install pandas
授权访问 Python 文件夹
从权限已提升的新命令提示符下运行以下 icacls 命令,以向 SQL Server Launchpad 服务和 SID S-1-15-2-1 (ALL_APPLICATION_PACKAGES) 授予对 Python 安装位置的读取和执行访问权限。
下面的示例使用 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 上的 ALL APPLICATION PACKAGES。 此外,也可以在英语版本的 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 命令,使用 CREATE EXTERNAL LANGUAGE 注册 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。 你可以安装 SQL Server on Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES) 和 Ubuntu。 有关更多信息,请参阅 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 上安装 SQL Server 语言扩展,该扩展用于 Python 自定义运行时。
如果可以,请在安装之前运行此命令以刷新系统中的包。
# 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 命令,使用 CREATE EXTERNAL LANGUAGE 注册 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。 你可以安装 SQL Server on Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES) 和 Ubuntu。 有关更多信息,请参阅 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) 上安装 SQL Server 语言扩展,该扩展用于 Python 自定义运行时。
# 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 命令,使用 CREATE EXTERNAL LANGUAGE 注册 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。 你可以安装 SQL Server on Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES) 和 Ubuntu。 有关更多信息,请参阅 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) 上安装 SQL Server 语言扩展,该扩展用于 Python 自定义运行时。
# 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 命令,使用 CREATE EXTERNAL LANGUAGE 注册 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)'