Pubblicare app Web Python nel servizio app Azure in Linux

Visual Studio offre la possibilità di pubblicare un'app Web Python direttamente in app Azure Servizio in Linux. La pubblicazione in app Azure Servizio in Linux include la copia dei file necessari nel server e la configurazione di un file appropriato web.config che indica al server Web come avviare l'app.

Nota

Linux è l'unica opzione del sistema operativo per l'esecuzione di app Python in servizio app. Python in Windows non è più supportato, come descritto in servizio app Documentazione linux - Supporto Python. Per Windows, è possibile compilare un'immagine del contenitore Windows personalizzata ed eseguire l'immagine in servizio app. Per altre informazioni, vedere Usare un'immagine Docker personalizzata.

Prerequisiti

  • Visual Studio. Per installare il prodotto, seguire la procedura descritta in Installare Visual Studio.

  • Progetto di app Web Python basato sul framework Bottle, Flask o Django. È possibile creare un progetto di test per provare il processo di pubblicazione.

  • Per pubblicare in Azure, è necessario un servizio app Azure di destinazione per la sottoscrizione di Azure.

    Se non si ha già una sottoscrizione di Azure, iniziare con un account Azure completo gratuito. Valutare anche la possibilità di iscriversi a Visual Studio Dev Essentials.

Versioni di Visual Studio

Il processo di pubblicazione è diverso in Visual Studio 2017 e versioni successive e in Visual Studio 2015. Entrambi gli approcci sono descritti in questo articolo.

  • Visual Studio 2015 automatizza alcuni passaggi di installazione, inclusa la web.config creazione del file, ma questa automazione limita la flessibilità e il controllo a lungo termine.

  • Visual Studio 2017 e versioni successive richiede più passaggi di installazione manuali, ma offre un controllo più esatto sull'ambiente Python.

Per altre informazioni sulle modifiche tra Visual Studio 2015 e Visual Studio 2017 e versioni successive, vedere il post di blog Pubblicare in Azure in Visual Studio 2017.

Creare un progetto di test

Se non si dispone di un progetto esistente da pubblicare, è possibile creare un progetto di test per provare il processo.

  1. In Visual Studio selezionare File > nuovo > progetto dal menu della barra degli strumenti per aprire la finestra di dialogo Crea un nuovo progetto .

  2. Nella finestra di dialogo immettere bottle nella casella Cerca , selezionare il modello Progetto Web bottle e quindi selezionare Avanti.

    Il modello Progetto Web Bottle è incluso nel carico di lavoro sviluppo Python. Per altre informazioni, vedere Modelli di progetto di applicazione Web Python.

  3. Immettere un nome e un percorso per il progetto, quindi selezionare Crea.

  4. Seguire le istruzioni per installare pacchetti esterni, selezionare Installa in un ambiente virtuale e scegliere l'interprete di base preferito per l'ambiente virtuale.

    L'ambiente virtuale corrisponde in genere alla versione di Python installata in servizio app.

Quando si è pronti, è possibile testare il progetto in locale selezionando Debug Avvia debug o usando il tasto di scelta rapida F5>.

Creare il servizio app Azure di destinazione

La pubblicazione in Azure richiede un servizio di app Azure di destinazione per una sottoscrizione di Azure.

Creare un servizio app con un'app Web vuota come indicato di seguito:

  1. Accedere al portale di Azure.

  2. Passare alla pagina servizio app s.

  3. Selezionare Crea e scegliere App Web dal menu a discesa. Verrà visualizzata la pagina Crea app Web.

  4. Configurare i valori seguenti nella scheda Informazioni di base:

    Impostazione Descrizione
    Gruppo di risorse Ignorare questo campo. Il sistema aggiorna questo valore dopo aver scelto l'impostazione di runtime.
    Nome Immettere un nome per l'app Web.
    Pubblicazione Selezionare Codice.
    Stack di runtime Scegliere il runtime Python appropriato dal menu a discesa. Dopo aver scelto un elemento, il sistema aggiorna il campo Gruppo di risorse.
    Area Selezionare un'area di Azure nelle vicinanze.
    Piano tariffario Selezionare il piano F1 gratuito.

    Per gli esempi in questo articolo, è possibile ignorare le impostazioni nelle altre schede.

  5. Selezionare Rivedi e crea. Esaminare le selezioni e quindi selezionare Crea.

  6. (Facoltativo) Dopo aver pronto il servizio app, è possibile passare alla risorsa, selezionare Scarica profilo di pubblicazione e salvare il file in locale.

Configurare Python nel servizio app di Azure

Dopo aver creato un servizio app con un'app Web vuota in esecuzione nella sottoscrizione, installare la versione desiderata di Python. Per la pubblicazione da Visual Studio 2017 e versioni successive, registrare il percorso esatto dell'interprete Python installato con l'estensione del sito. Per altre informazioni, vedere Installare interpreti Python.

Se lo si desidera, è anche possibile installare il bottle pacchetto. Tuttavia, questo pacchetto viene installato in un passaggio successivo di questa procedura dettagliata.

Pubblicare nel servizio app - Visual Studio 2017 e versioni successive

Durante la pubblicazione nel servizio app di Azure da Visual Studio 2017 e versioni successive vengono copiati solo i file del progetto nel server. È necessario creare i file necessari per configurare l'ambiente server.

  1. In Visual Studio Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi > nuovo elemento. Nella finestra di dialogo selezionare il modello Web.config di Azure (Fast CGI) e selezionare Aggiungi. Questo passaggio crea un web.config file nella radice del progetto.

  2. Modificare la PythonHandler voce nel web.config file in modo che il percorso corrisponda all'installazione di Python nel server, come descritto in Guida di riferimento alla configurazione di IIS (iis.net). Ad esempio, per Python 3.6.1 x64 la voce sarà la seguente:

    <system.webServer>
      <handlers>
        <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
            scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py"
            resourceType="Unspecified" requireAccess="Script"/>
      </handlers>
    </system.webServer>
    
  3. Impostare la WSGI_HANDLER voce nel web.config file in base alle esigenze del framework in uso:

    • Bottle: aggiungere parentesi dopo il app.wsgi_app valore come illustrato in questo esempio. Le parentesi sono necessarie perché l'oggetto è una funzione anziché una variabile. È possibile visualizzare la sintassi nel app.py file .

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: modificare il valore WSGI_HANDLER in <project_name>.app dove <project_name> corrisponde al nome del progetto. È possibile trovare l'identificatore esatto esaminando l'istruzione from <project_name> import app nel runserver.py file. Ad esempio, se il progetto è denominato "FlaskAzurePublishExample", la voce viene visualizzata come segue:

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django: sono necessarie due modifiche al file per i web.config progetti Django.

      • Modificare il WSGI_HANDLER valore in django.core.wsgi.get_wsgi_application(). L'oggetto si trova nel wsgi.py file.

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • Aggiungere la voce seguente subito dopo la voce per la WSGI_HANDLER chiave. Sostituire il valore DjangoAzurePublishExample con il nome del progetto:

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Solo app Django: nel file del settings.py progetto Django aggiungere il dominio o l'indirizzo IP dell'URL del ALLOWED_HOSTS sito alla voce. Sostituire 'vspython-test-02.azurewebsites.net' con l'URL:

    # Change the URL to your specific site
    ALLOWED_HOSTS = ['vspython-test-02.azurewebsites.net']
    

    Se non si aggiunge l'URL ai risultati della matrice, viene visualizzato l'errore seguente:

    DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
    

    Quando la matrice è vuota, Django consente 'localhost' automaticamente come host. Se si aggiunge l'URL di produzione, 'localhost' non è consentito automaticamente come host. Per questo motivo, è possibile mantenere copie separate di sviluppo e produzione del settings.py file oppure usare le variabili di ambiente per controllare i valori di runtime.

  5. Selezionare il modello.

    1. In Esplora soluzioni espandere la cartella del progetto.
    2. Fare clic con il pulsante destro del mouse sulla cartella statica e scegliere Aggiungi > nuovo elemento.
    3. Selezionare il modello web.config file statici di Azure e selezionare Aggiungi.

    Questa azione crea un altro web.config file nella cartella statica che disabilita l'elaborazione Python per tale cartella. Questa configurazione invia richieste di file statici al server Web predefinito, anziché usare l'applicazione Python.

  6. In Esplora soluzioni salvare il progetto e quindi fare clic con il pulsante destro del mouse sul progetto e scegliere Pubblica.

    Screenshot che mostra come accedere al comando Pubblica per un progetto in Visual Studio.

  7. Nella finestra Pubblica specificare la destinazione di pubblicazione:

    1. Per Destinazione selezionare Azure e quindi avanti.

    2. Per Destinazione specifica selezionare app Azure Servizio (Windows) e selezionare Avanti.

      • Se la finestra di dialogo indica che sono necessari altri componenti obbligatori per completare l'installazione, selezionare Fine. Verrà aperto il Programma di installazione di Visual Studio. Confermare le opzioni e selezionare Installa.
    3. Per il servizio app selezionare il servizio app appropriato per la sottoscrizione e selezionare Fine.

      Screenshot che mostra come preparare il processo di pubblicazione in Azure in Visual Studio 2017 e versioni successive usando una sottoscrizione esistente.

      Al termine del processo di creazione della pubblicazione, selezionare Chiudi.

  8. Visual Studio visualizza lo stato in una finestra "Attività pubblicazione Web" e anche nella finestra Stato di avanzamento della creazione del profilo di pubblicazione. Quando viene visualizzato il messaggio "Pronto per la pubblicazione" per l'app Web, selezionare Pubblica.

    Screenshot che mostra come pubblicare l'app Web in Visual Studio.

  9. Quando la pubblicazione ha esito positivo, il browser predefinito viene aperto nell'URL del sito. L'URL del sito viene visualizzato anche nella finestra Pubblica .

    Screenshot che mostra il browser aperto all'URL del sito per l'app Web pubblicata.

    Se l'URL del sito non viene aperto automaticamente, selezionare Apri sito per visualizzare l'app Web nel browser:

    Screenshot che mostra come aprire l'URL del sito per l'app Web pubblicata nel browser.

  10. Quando si apre il browser, è possibile che venga visualizzato il messaggio "Impossibile visualizzare la pagina perché si è verificato un errore interno del server". Questo messaggio indica che l'ambiente Python nel server non è completamente configurato, nel qual caso eseguire la procedura seguente:

    1. Assicurarsi di avere installato un'estensione del sito Python appropriata. Per altre informazioni, vedere Avvio rapido: Distribuire un'app Web Python (Django o Flask) nel servizio app Azure.

    2. Controllare il percorso dell'interprete Python nel file web.config. Il percorso deve corrispondere esattamente al percorso di installazione dell'estensione del sito selezionata.

    3. Usare la console Kudu per aggiornare tutti i pacchetti elencati nel file dell'app requirements.txt . Passare alla stessa cartella Python usata nel web.config file, ad esempio /home/python361x64. Eseguire il comando seguente, come descritto nella sezione della console Kudu:

      python -m pip install --upgrade -r /home/site/wwwroot/requirements.txt
      

      Se vengono visualizzati errori di autorizzazione quando si esegue questo comando, verificare di eseguire il comando nella cartella dell'estensione del sito. Non eseguire il comando in una cartella con una delle installazioni python predefinite di servizio app. Poiché non è possibile modificare gli ambienti predefiniti, il tentativo di installare i pacchetti ha sicuramente esito negativo.

    4. Per un output dettagliato degli errori, aggiungere la riga seguente al web.config file all'interno del <system.webServer> nodo, che fornisce un output degli errori più dettagliato:

      <httpErrors errorMode="Detailed"></httpErrors>
      
    5. Provare a riavviare il servizio app dopo l'installazione dei nuovi pacchetti. Un riavvio non è necessario quando si modifica il web.config file, perché servizio app esegue un riavvio automatico ogni volta che il web.config file cambia.

      Suggerimento

      Se si apportano modifiche al file requirements.txt dell'app, assicurarsi di usare di nuovo la console di Kudu per installare i pacchetti che sono ora elencati nel file.

  11. Dopo aver configurato completamente l'ambiente server, aggiornare la pagina nel browser per visualizzare l'app Web:

    Screenshot che mostra i risultati della pubblicazione di app Bottle, Flask e Django per app Azure Servizio in Visual Studio.

Pubblicare nel servizio app - Visual Studio 2015

Seguire questa procedura per pubblicare l'app Web Python in app Azure Servizio in Visual Studio 2015.

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Pubblica.

  2. Nella finestra di dialogo Pubblica selezionare Servizio app di Microsoft Azure:

    Screenshot che mostra come pubblicare in Azure in Visual Studio e selezionare un servizio app Azure.

  3. Selezionare Microsoft app Azure Service come destinazione di pubblicazione. Nella finestra di dialogo successiva selezionare un servizio app esistente o selezionare Nuovo per crearne uno nuovo.

  4. I dettagli servizio app vengono visualizzati nella scheda Connessione ion della finestra di dialogo Pubblica:

    Screenshot che mostra come pubblicare in Azure in Visual Studio e visualizzare la connessione servizio app.

  5. In base alle esigenze, selezionare Avanti per esaminare altre impostazioni.

  6. Seleziona Pubblica. Dopo la distribuzione dell'applicazione in Azure, il browser predefinito viene aperto nell'URL del sito.

Nell'ambito di questo processo, Visual Studio completa anche i passaggi seguenti:

  • Crea un web.config file nel server che contiene puntatori appropriati alla funzione dell'app wsgi_app e all'interprete Python 3.4 predefinito di servizio app.
  • Disattiva l'elaborazione per i file nella cartella statica del progetto. Le regole per questa azione si trovano nel web.config file.
  • Pubblica l'ambiente virtuale nel server.
  • Aggiunge un web.debug.config file e gli strumenti di debug per abilitare il debug remoto. Per Visual Studio 2019 versione 16.4 e precedenti, gli strumenti di debug sono ptvsd. Per Visual Studio 2019 versione 16.5 e successive, gli strumenti di debug sono debugpy.

Come accennato in precedenza, questi passaggi automatici semplificano il processo di pubblicazione, ma possono rendere più difficile controllare l'ambiente Python. Ad esempio, il file web.config viene creato solo nel server ma non viene aggiunto al progetto. Anche il processo di pubblicazione richiede più tempo poiché copia l'intero ambiente virtuale dal computer di sviluppo anziché basarsi sulla configurazione del server.

Alla fine, è possibile mantenere il proprio web.config file e usare il requirements.txt file per gestire direttamente i pacchetti nel server. Quando si usa il requirements.txt file, in particolare, è possibile garantire che gli ambienti di sviluppo e server corrispondano sempre.