为 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 2019 上安装机器学习服务,则已安装语言扩展,可以跳过此步骤。

按照以下步骤安装 SQL Server 语言扩展,该扩展用于 Python 自定义运行时。

  1. 启动 SQL Server 2019 的安装向导。

  2. 在“安装”选项卡上,选择“全新 SQL Server 独立安装或向现有安装添加功能” 。

  3. 在“功能选择” 页上,选择以下选项:

    • 数据库引擎服务

      要将语言扩展与 SQL Server 结合使用,必须安装数据库引擎的实例。 可以使用新的或现有实例。

    • 机器学习服务和语言扩展

      选择“机器学习服务和语言扩展”。 请勿选择 Python,因为稍后将安装自定义 Python 运行时。

      SQL Server 2019 Language Extensions setup.

  4. 在“准备安装”页面上,验证是否已包括这些选择,然后选择“安装” 。

    • 数据库引擎服务
    • 机器学习服务和语言扩展
  5. 安装完成后,重新启动计算机(如果要求这样做)。

重要

如果使用语言扩展安装 SQL Server 2019 的新实例,则在继续下一步之前,请安装累积更新 (CU) 3 或更高版本

安装 Python

用于自定义 Python 运行时的 Python 语言扩展目前仅支持 Python 3.7。 如果要使用不同版本的 Python,请按照 Python 语言扩展 GitHub 存储库中的说明来修改和重新生成扩展。

  1. 下载适用于 Windows 的 Python 3.7,并在服务器上运行安装程序。

  2. 选择“将 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 命令,以向 SQL Server Launchpad 服务和 SID S-1-15-2-1 (ALL_APPLICATION_PACKAGES) 授予对 Python 安装位置的读取和执行访问权限。

下面的示例使用 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 上的 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 命令,使用 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 自定义运行时之前,请安装:

安装语言扩展

注意

如果已在 SQL Server 2019 上安装机器学习服务,则已安装用于语言扩展的 mssql-server-extensibility 包,你可以跳过此步骤。

运行以下命令以在 Ubuntu Linux 上安装 SQL Server 语言扩展,该扩展用于 Python 自定义运行时。

  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 命令,使用 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 自定义运行时之前,请安装:

安装语言扩展

注意

如果已在 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 存储库中的说明来修改和重新生成扩展。

  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 命令,使用 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 自定义运行时之前,请安装:

安装语言扩展

注意

如果已在 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 存储库中的说明来修改和重新生成扩展。

  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 命令,使用 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)'

后续步骤