Installare un runtime personalizzato di Python per SQL Server

Si applica a: SQL Server 2019 (15.x)

Informazioni su come installare un runtime personalizzato di Python per l'esecuzione di script Python esterni con SQL Server in:

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

Il runtime personalizzato può eseguire script di Machine Learning e usa le estensioni del linguaggio di SQL Server.

Usare la propria versione del runtime di Python con SQL Server, invece della versione predefinita del runtime installata con SQL Server Machine Learning Services.

A partire da SQL Server 2022 (16.x), i runtime per R, Python e Java non vengono più installati con l'installazione di SQL. Occorre invece installare i runtime e i pacchetti personalizzati per Python che si intende usare. Per altre informazioni, vedere Installare Machine Learning Services (Python e R) per SQL Server 2022 in Windows o Installare SQL Server Machine Learning Services (Python e R) in Linux.

Prerequisiti

Prima di installare un runtime personalizzato di Python:

Installare le estensioni del linguaggio

Nota

Se Machine Learning Services è installato in SQL Server 2019, le estensioni del linguaggio sono già installate ed è possibile ignorare questo passaggio.

Attenersi alla procedura seguente per installare le Estensioni del linguaggio di SQL Server, che vengono usate per il runtime personalizzato di Python.

  1. Avviare l'Installazione guidata di SQL Server 2019.

  2. Nella scheda Installazione selezionare Nuova installazione autonoma di SQL Server o aggiunta di funzionalità a un'installazione esistente.

  3. Nella pagina Selezione funzionalità selezionare queste opzioni:

    • Servizi motore di database

      Per usare le estensioni del linguaggio con SQL Server, è necessario installare un'istanza del motore di database. È possibile usare un'istanza nuova o esistente.

    • Machine Learning Services ed estensioni del linguaggio

      Selezionare Machine Learning Services ed estensioni del linguaggio. Non selezionare Python, perché in seguito verrà installato il runtime di Python personalizzato.

      SQL Server 2019 Language Extensions setup.

  4. Nella pagina Inizio installazione verificare che le opzioni selezionate siano incluse e selezionare Installa.

    • Servizi motore di database
    • Machine Learning Services ed estensioni del linguaggio
  5. Al termine dell'installazione, riavviare il computer, se richiesto.

Importante

Se si installa una nuova istanza di SQL Server 2019 con le estensioni del linguaggio, installare l'aggiornamento cumulativo (CU) 3 o versione successiva prima di continuare con il passaggio successivo.

Installare Python

L'estensione del linguaggio Python usata per il runtime Python personalizzato attualmente supporta solo Python 3.7. Se si vuole usare una versione diversa di Python, seguire le istruzioni nel repository GitHub Estensione del linguaggio Python per modificare e ricompilare l'estensione.

  1. Scaricare Python 3.7 per Windows ed eseguire il programma di installazione nel server.

  2. Selezionare Aggiungi Python 3.7 a PATH e quindi selezionare Personalizza installazione.

    Python 3.7 installation - Add Python 3.7 to PATH

  3. In Funzionalità facoltative lasciare le impostazioni predefinite e selezionare Avanti.

  4. Selezionare Installa per tutti gli utenti e prendere nota del percorso di installazione.

    Python 3.7 installation - Install for all users

  5. Selezionare Installa.

Installare pandas

Installare il pacchetto pandas per Python da un prompt dei comandi con privilegi elevati (Esegui come amministratore):

python.exe -m pip install pandas

Concedere l'accesso alla cartella di Python

Eseguire i comandi icacls seguenti da un nuovo prompt dei comandi con privilegi elevati per concedere l'accesso in lettura ed esecuzione al percorso di installazione di Python al Servizio Launchpad di SQL Server e al SID S-1-15-2-1 (ALL_APPLICATION_PACKAGES).

Gli esempi riportati di seguito usano il percorso di installazione di Python C:\Program Files\Python37. Se il percorso della propria installazione è diverso, cambiarlo nel comando.

  1. Concedere le autorizzazioni a nome utente del servizio Launchpad di SQL Server.

    icacls "C:\Program Files\Python37" /grant "NT Service\MSSQLLAUNCHPAD":(OI)(CI)RX /T
    

    Per l'istanza denominata, il comando sarà icacls "C:\Program Files\Python37" /grant "NT Service\MSSQLLAUNCHPAD$SQL01":(OI)(CI)RX /T per un'istanza denominata SQL01.

  2. Concedere le autorizzazioni al SID S-1-15-2-1.

    icacls "C:\Program Files\Python37" /grant *S-1-15-2-1:(OI)(CI)RX /T
    

    Il comando precedente concede le autorizzazioni al SID del computer S-1-15-2-1, che equivale a ALL APPLICATION PACKAGES (TUTTI I PACCHETTI APPLICAZIONI) in una versione di Windows in inglese. In alternativa è possibile usare icacls "C:\Program Files\Python37" /grant "ALL APPLICATION PACKAGES":(OI)(CI)RX /T in una versione di Windows in inglese.

Riavviare Launchpad di SQL Server

Per riavviare il servizio Launchpad di SQL Server, attenersi alla seguente procedura.

  1. Aprire Gestione configurazione SQL Server.

  2. In Servizi SQL Server, fare clic con il pulsante destro del mouse su Launchpad di SQL Server (MSSQLSERVER) e selezionare Riavvia. Se si usa un'istanza denominata, il nome dell'istanza verrà visualizzato al posto di (MSSQLSERVER).

Registrare l'estensione del linguaggio

Seguire questa procedura per scaricare e registrare l'estensione del linguaggio Python, che viene usata per il runtime personalizzato di Python.

  1. Scaricare il file python-lang-extension-windows-release.zip dal repository GitHub per le estensioni del linguaggio di SQL Server.

    In alternativa, è possibile usare la versione di debug (python-lang-extension-windows-debug.zip) in un ambiente di sviluppo o di test. La versione di debug fornisce informazioni di registrazione dettagliate per esaminare eventuali errori e non è consigliata per gli ambienti di produzione.

  2. Usare Azure Data Studio per connettersi all'istanza di SQL Server ed eseguire il comando T-SQL seguente per registrare l'estensione del linguaggio Python con CREATE EXTERNAL LANGUAGE.

    Modificare il percorso riportato in questa istruzione in modo che corrisponda al percorso del file ZIP dell'estensione del linguaggio scaricato (python-lang-extension-windows-release.zip) e al percorso dell'installazione di 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
    

    Eseguire l'istruzione per ogni database in cui si desidera usare l'estensione del linguaggio Python.

    Nota

    Python è una parola riservata e non può essere usata come nome per un nuovo nome di linguaggio esterno. Usare un altro nome. Ad esempio, l'istruzione precedente usa myPython.

Prerequisiti

Prima di installare un runtime personalizzato di Python:

Installare le estensioni del linguaggio

Nota

Se Machine Learning Services è installato in SQL Server 2019, il pacchetto mssql-server-extensibility per le estensioni del linguaggio è già installato ed è possibile ignorare questo passaggio.

Eseguire i comandi seguenti per installare le estensioni del linguaggio di SQL Server in Ubuntu Linux, che viene usato per il runtime personalizzato di Python.

  1. Se possibile, eseguire questo comando per aggiornare i pacchetti nel sistema prima dell'installazione.

    # Install as root or sudo
    sudo apt-get update
    
  2. Ubuntu potrebbe non avere l'opzione di trasporto https apt. Per installarla, usare questo comando.

    # Install as root or sudo
    apt-get install apt-transport-https
    
  3. Installare mssql-server-extensibility con questo comando.

    # Install as root or sudo
    sudo apt-get install mssql-server-extensibility
    

Installare Python 3.7 e pandas

L'estensione del linguaggio Python usata per il runtime Python personalizzato attualmente supporta solo Python 3.7. Se si vuole usare una versione diversa di Python, seguire le istruzioni nel repository GitHub Estensione del linguaggio Python per modificare e ricompilare l'estensione.

  1. Eseguire i comandi seguenti per installare 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. Eseguire il comando seguente per installare il pacchetto pandas

    # Install pandas to /usr/lib:
    sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages
    

Installazione personalizzata di Python

Nota

Se è stato installato Python 3.7 nel percorso predefinito di /usr/lib/python3.7, è possibile ignorare questa sezione e passare alla sezione Registrare l'estensione del linguaggio.

Se è stata creata una versione personalizzata di Python 3.7, usare i comandi seguenti per comunicare a SQL Server l'installazione personalizzata.

Aggiungere una variabile di ambiente

In primo luogo, modificare il servizio mssql-launchpadd per aggiungere la variabile di ambiente PYTHONHOME al file /etc/systemd/system/mssql-launchpadd.service.d/override.conf

  1. Aprire il file con systemctl

    sudo systemctl edit mssql-launchpadd
    
  2. Inserire il testo seguente nel file /etc/systemd/system/mssql-launchpadd.service.d/override.conf che si apre. Impostare il valore di PYTHONHOME sul percorso di installazione personalizzato di Python.

    [Service]
    Environment="PYTHONHOME=<path to the python3.7 lib>"
    
  3. Salvare il file e chiudere l'editor.

Quindi, verificare che libpython3.7m.so.1.0 possa essere caricato.

  1. Creare un file python.conf personalizzato in /etc/ld.so.conf.d.

    sudo vi /etc/ld.so.conf.d/custom-python.conf
    
  2. Nel file che si apre aggiungere il percorso libpython3.7m.so.1.0 dall'installazione personalizzata di Python.

    <path to the python3.7 lib>
    
  3. Salvare il nuovo file e chiudere l'editor.

  4. Eseguire ldconfig e verificare che sia possibile caricare libpython3.7m.so.1.0 eseguendo i comandi seguenti e verificando che tutte le librerie dipendenti siano disponibili.

    sudo ldconfig
    ldd <path to the python3.7 lib>/libpython3.7m.so.1.0
    

Concedere l'accesso alla cartella di Python

Impostare l'opzione datadirectories nella sezione extensibility del file /var/opt/mssql/mssql.conf sull'installazione personalizzata di Python.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to python3.7>

Riavviare mssql-launchpadd

Eseguire il comando seguente per riavviare mssql-launchpadd.

sudo systemctl restart mssql-launchpadd

Registrare l'estensione del linguaggio

Seguire questa procedura per scaricare e registrare l'estensione del linguaggio Python, che viene usata per il runtime personalizzato di Python.

  1. Scaricare il file python-lang-extension-linux-release.zip dal repository GitHub per le estensioni del linguaggio di SQL Server.

    In alternativa, è possibile usare la versione di debug (python-lang-extension-linux-debug.zip) in un ambiente di sviluppo o di test. La versione di debug fornisce informazioni di registrazione dettagliate per esaminare eventuali errori e non è consigliata per gli ambienti di produzione.

  2. Usare Azure Data Studio per connettersi all'istanza di SQL Server ed eseguire il comando T-SQL seguente per registrare l'estensione del linguaggio Python con CREATE EXTERNAL LANGUAGE.

    Modificare il percorso riportato in questa istruzione in modo che corrisponda al percorso del file ZIP dell'estensione del linguaggio scaricato (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
    

    Eseguire l'istruzione per ogni database in cui si desidera usare l'estensione del linguaggio Python.

    Nota

    Python è una parola riservata e non può essere usata come nome per un nuovo nome di linguaggio esterno. Usare un altro nome. Ad esempio, l'istruzione precedente usa myPython.

Prerequisiti

Prima di installare un runtime personalizzato di Python:

Installare le estensioni del linguaggio

Nota

Se Machine Learning Services è installato in SQL Server 2019, il pacchetto mssql-server-extensibility per le estensioni del linguaggio è già installato ed è possibile ignorare questo passaggio.

Eseguire il comando seguente per installare le estensioni del linguaggio di SQL Server in Red Hat Enterprise Linux (RHEL), che viene usato per il runtime personalizzato di Python.

# Install as root or sudo
sudo yum install mssql-server-extensibility

Installare Python 3.7 e pandas

L'estensione del linguaggio Python usata per il runtime Python personalizzato attualmente supporta solo Python 3.7. Se si vuole usare una versione diversa di Python, seguire le istruzioni nel repository GitHub Estensione del linguaggio Python per modificare e ricompilare l'estensione.

  1. Eseguire i comandi seguenti per installare 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. Eseguire il comando seguente per installare il pacchetto pandas

    # Install pandas to /usr/lib:
    sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages
    

Installazione personalizzata di Python

Nota

Se è stato installato Python 3.7 nel percorso predefinito di /usr/lib/python3.7, è possibile ignorare questa sezione e passare alla sezione Registrare l'estensione del linguaggio.

Se è stata creata una versione personalizzata di Python 3.7, usare i comandi seguenti per comunicare a SQL Server l'installazione personalizzata.

Aggiungere una variabile di ambiente

In primo luogo, modificare il servizio mssql-launchpadd per aggiungere la variabile di ambiente PYTHONHOME al file /etc/systemd/system/mssql-launchpadd.service.d/override.conf

  1. Aprire il file con systemctl

    sudo systemctl edit mssql-launchpadd
    
  2. Inserire il testo seguente nel file /etc/systemd/system/mssql-launchpadd.service.d/override.conf che si apre. Impostare il valore di PYTHONHOME sul percorso di installazione personalizzato di Python.

    [Service]
    Environment="PYTHONHOME=<path to the python3.7 lib>"
    
  3. Salvare il file e chiudere l'editor.

Quindi, verificare che libpython3.7m.so.1.0 possa essere caricato.

  1. Creare un file python.conf personalizzato in /etc/ld.so.conf.d.

    sudo vi /etc/ld.so.conf.d/custom-python.conf
    
  2. Nel file che si apre aggiungere il percorso libpython3.7m.so.1.0 dall'installazione personalizzata di Python.

    <path to the python3.7 lib>
    
  3. Salvare il nuovo file e chiudere l'editor.

  4. Eseguire ldconfig e verificare che sia possibile caricare libpython3.7m.so.1.0 eseguendo i comandi seguenti e verificando che tutte le librerie dipendenti siano disponibili.

    sudo ldconfig
    ldd <path to the python3.7 lib>/libpython3.7m.so.1.0
    

Concedere l'accesso alla cartella di Python

Impostare l'opzione datadirectories nella sezione extensibility del file /var/opt/mssql/mssql.conf sull'installazione personalizzata di Python.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to python3.7>

Riavviare mssql-launchpadd

Eseguire il comando seguente per riavviare mssql-launchpadd.

sudo systemctl restart mssql-launchpadd

Registrare l'estensione del linguaggio

Seguire questa procedura per scaricare e registrare l'estensione del linguaggio Python, che viene usata per il runtime personalizzato di Python.

  1. Scaricare il file python-lang-extension-linux-release.zip dal repository GitHub per le estensioni del linguaggio di SQL Server.

    In alternativa, è possibile usare la versione di debug (python-lang-extension-linux-debug.zip) in un ambiente di sviluppo o di test. La versione di debug fornisce informazioni di registrazione dettagliate per esaminare eventuali errori e non è consigliata per gli ambienti di produzione.

  2. Usare Azure Data Studio per connettersi all'istanza di SQL Server ed eseguire il comando T-SQL seguente per registrare l'estensione del linguaggio Python con CREATE EXTERNAL LANGUAGE.

    Modificare il percorso riportato in questa istruzione in modo che corrisponda al percorso del file ZIP dell'estensione del linguaggio scaricato (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
    

    Eseguire l'istruzione per ogni database in cui si desidera usare l'estensione del linguaggio Python.

    Nota

    Python è una parola riservata e non può essere usata come nome per un nuovo nome di linguaggio esterno. Usare un altro nome. Ad esempio, l'istruzione precedente usa myPython.

Prerequisiti

Prima di installare un runtime personalizzato di Python:

Installare le estensioni del linguaggio

Nota

Se Machine Learning Services è installato in SQL Server 2019, il pacchetto mssql-server-extensibility per le estensioni del linguaggio è già installato ed è possibile ignorare questo passaggio.

Eseguire il comando seguente per installare le estensioni del linguaggio di SQL Server in SUSE Linux Enterprise Server (SLES), che viene usato per il runtime personalizzato di Python.

# Install as root or sudo
sudo zypper install mssql-server-extensibility

Installare Python 3.7 e pandas

L'estensione del linguaggio Python usata per il runtime Python personalizzato attualmente supporta solo Python 3.7. Se si vuole usare una versione diversa di Python, seguire le istruzioni nel repository GitHub Estensione del linguaggio Python per modificare e ricompilare l'estensione.

  1. Installare Python 3.7 sul server.

  2. Eseguire il comando seguente per installare il pacchetto pandas

    # Install pandas to /usr/lib:
    sudo python3.7 -m pip install pandas -t /usr/lib/python3.7/dist-packages
    

Installazione personalizzata di Python

Nota

Se è stato installato Python 3.7 nel percorso predefinito di /usr/lib/python3.7, è possibile ignorare questa sezione e passare alla sezione Registrare l'estensione del linguaggio.

Se è stata creata una versione personalizzata di Python 3.7, usare i comandi seguenti per comunicare a SQL Server l'installazione personalizzata.

Aggiungere una variabile di ambiente

In primo luogo, modificare il servizio mssql-launchpadd per aggiungere la variabile di ambiente PYTHONHOME al file /etc/systemd/system/mssql-launchpadd.service.d/override.conf

  1. Aprire il file con systemctl

    sudo systemctl edit mssql-launchpadd
    
  2. Inserire il testo seguente nel file /etc/systemd/system/mssql-launchpadd.service.d/override.conf che si apre. Impostare il valore di PYTHONHOME sul percorso di installazione personalizzato di Python.

    [Service]
    Environment="PYTHONHOME=<path to the python3.7 lib>"
    
  3. Salvare il file e chiudere l'editor.

Quindi, verificare che libpython3.7m.so.1.0 possa essere caricato.

  1. Creare un file python.conf personalizzato in /etc/ld.so.conf.d.

    sudo vi /etc/ld.so.conf.d/custom-python.conf
    
  2. Nel file che si apre aggiungere il percorso libpython3.7m.so.1.0 dall'installazione personalizzata di Python.

    <path to the python3.7 lib>
    
  3. Salvare il nuovo file e chiudere l'editor.

  4. Eseguire ldconfig e verificare che sia possibile caricare libpython3.7m.so.1.0 eseguendo i comandi seguenti e verificando che tutte le librerie dipendenti siano disponibili.

    sudo ldconfig
    ldd <path to the python3.7 lib>/libpython3.7m.so.1.0
    

Concedere l'accesso alla cartella di Python

Impostare l'opzione datadirectories nella sezione extensibility del file /var/opt/mssql/mssql.conf sull'installazione personalizzata di Python.

sudo /opt/mssql/bin/mssql-conf set extensibility.datadirectories <path to python3.7>

Riavviare mssql-launchpadd

Eseguire il comando seguente per riavviare mssql-launchpadd.

sudo systemctl restart mssql-launchpadd

Registrare l'estensione del linguaggio

Seguire questa procedura per scaricare e registrare l'estensione del linguaggio Python, che viene usata per il runtime personalizzato di Python.

  1. Scaricare il file python-lang-extension-linux-release.zip dal repository GitHub per le estensioni del linguaggio di SQL Server.

    In alternativa, è possibile usare la versione di debug (python-lang-extension-linux-debug.zip) in un ambiente di sviluppo o di test. La versione di debug fornisce informazioni di registrazione dettagliate per esaminare eventuali errori e non è consigliata per gli ambienti di produzione.

  2. Usare Azure Data Studio per connettersi all'istanza di SQL Server ed eseguire il comando T-SQL seguente per registrare l'estensione del linguaggio Python con CREATE EXTERNAL LANGUAGE.

    Modificare il percorso riportato in questa istruzione in modo che corrisponda al percorso del file ZIP dell'estensione del linguaggio scaricato (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
    

    Eseguire l'istruzione per ogni database in cui si desidera usare l'estensione del linguaggio Python.

    Nota

    Python è una parola riservata e non può essere usata come nome per un nuovo nome di linguaggio esterno. Usare un altro nome. Ad esempio, l'istruzione precedente usa myPython.

Abilitare gli script esterni

È possibile eseguire uno script esterno di Python con la stored procedure sp_execute_external script.

Per abilitare gli script esterni, usare Azure Data Studio per eseguire l'istruzione seguente.

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

Verifica l'installazione

Usare lo script SQL seguente per verificare l'installazione e la funzionalità del runtime personalizzato di Python. Nello script di esempio seguente, myPython viene usato come nome del linguaggio perché non è possibile specificare il nome Python di lingua predefinita per un runtime personalizzato.

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

Passaggi successivi