SQL Server용 Python 사용자 지정 런타임 설치

적용 대상: SQL Server 2019(15.x)

SQL Server에서 외부 Python 스크립트를 실행할 수 있도록 Python 사용자 지정 런타임을 설치하는 방법을 알아봅니다.

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

사용자 지정 런타임은 기계 학습 스크립트를 실행할 수 있으며 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 사용자 지정 런타임을 설치하기 전에 다음을 설치합니다.

언어 확장 설치

참고

SQL Server 2019에 Machine Learning Services가 설치되어 있는 경우 언어 확장이 이미 설치되어 있으므로 이 단계를 건너뛰어도 됩니다.

Python 사용자 지정 런타임에 사용되는 SQL Server 언어 확장을 설치하려면 다음 단계를 수행합니다.

  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. PATH에 Python 3.7 추가를 선택한 다음, 설치 사용자 지정을 선택합니다.

    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 설치 위치에 대한 READ &EXECUTE 액세스 권한을 SQL Server 실행 패드 서비스 및 SID S-1-15-2-1(ALL_APPLICATION_PACKAGES)에 부여합니다.

아래 예제에서는 Python 설치 위치를 C:\Program Files\Python37로 사용합니다. 위치가 다른 경우 명령에서 위치를 변경합니다.

  1. SQL Server 실행 패드 서비스 사용자 이름에 대한 권한을 부여합니다.

    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 실행 패드 다시 시작

SQL Server 실행 패드 서비스를 다시 시작하려면 다음 단계를 수행합니다.

  1. SQL Server 구성 관리자를 엽니다.

  2. SQL Server 서비스에서 SQL Server 실행 패드(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)의 위치와 R 설치 위치(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에 Machine Learning Services가 설치된 경우 언어 확장용 mssql-server-extensibility 패키지가 이미 설치되어 있으므로 이 단계를 건너뛰어도 됩니다.

Python 사용자 지정 런타임에 사용되는 SQL Server 언어 확장을 Ubuntu Linux에 설치하려면 다음 명령을 실행합니다.

  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의 사용자 지정 설치

참고

Python 3.7을 기본 위치 /usr/lib/python3.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 언어 확장을 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 언어 확장을 사용하려는 각 데이터베이스에 대해 문을 실행합니다.

    참고

    Python은 예약어이며 새 외부 언어 이름으로 사용할 수 없습니다. 다른 이름을 사용하세요. 예를 들어 위의 문에서는 myPython을 사용합니다.

필수 조건

Python 사용자 지정 런타임을 설치하기 전에 다음을 설치합니다.

언어 확장 설치

참고

SQL Server 2019에 Machine Learning Services가 설치된 경우 언어 확장용 mssql-server-extensibility 패키지가 이미 설치되어 있으므로 이 단계를 건너뛰어도 됩니다.

Python 사용자 지정 런타임에 사용되는 SQL Server 언어 확장을 RHEL(Red Hat Enterprise Linux)에 설치하려면 다음 명령을 실행합니다.

# 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의 사용자 지정 설치

참고

Python 3.7을 기본 위치 /usr/lib/python3.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 언어 확장을 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 언어 확장을 사용하려는 각 데이터베이스에 대해 문을 실행합니다.

    참고

    Python은 예약어이며 새 외부 언어 이름으로 사용할 수 없습니다. 다른 이름을 사용하세요. 예를 들어 위의 문에서는 myPython을 사용합니다.

필수 조건

Python 사용자 지정 런타임을 설치하기 전에 다음을 설치합니다.

언어 확장 설치

참고

SQL Server 2019에 Machine Learning Services가 설치된 경우 언어 확장용 mssql-server-extensibility 패키지가 이미 설치되어 있으므로 이 단계를 건너뛰어도 됩니다.

Python 사용자 지정 런타임에 사용되는 SQL Server 언어 확장을 SLES(SUSE Linux Enterprise 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의 사용자 지정 설치

참고

Python 3.7을 기본 위치 /usr/lib/python3.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 언어 확장을 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 언어 확장을 사용하려는 각 데이터베이스에 대해 문을 실행합니다.

    참고

    Python은 예약어이며 새 외부 언어 이름으로 사용할 수 없습니다. 다른 이름을 사용하세요. 예를 들어 위의 문에서는 myPython을 사용합니다.

외부 스크립트 사용

저장 프로시저 sp_execute_external script를 사용하여 Python 외부 스크립트를 실행할 수 있습니다.

외부 스크립트를 사용하려면 Azure Data Studio를 사용하여 다음 문을 실행합니다.

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

설치 확인

다음 SQL 스크립트를 사용하여 Python 사용자 지정 런타임의 설치 및 기능을 확인합니다. 아래 샘플 스크립트에서는 사용자 지정 런타임에 기본 언어 이름 Python을 제공할 수 없으므로 myPython이 언어 이름으로 사용됩니다.

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

다음 단계