Creazione di app Web con Bottle in Azure

Questa esercitazione illustra le operazioni iniziali per l'esecuzione di Python in App Web del servizio app di Azure. Le app Web di Azure offrono hosting gratuito limitato e capacità di distribuzione rapida, oltre alla possibilità di utilizzare Python! Se la crescita dell'applicazione lo richiede, è possibile passare all'hosting a pagamento e avvalersi dell'integrazione con tutti gli altri servizi di Azure.

Si creerà un'app Web usando il framework Web di Bottle. Vedere le versioni alternative di questa esercitazione per Django e Flask. Verrà creato il sito Web dalla raccolta di Azure, sarà configurata la distribuzione Git e si procederà alla clonazione locale del repository. Quindi si eseguirà l'applicazione localmente e si apporteranno le modifiche, che verranno sottoposte al commit e al push in App Web del servizio app di Azure. Nell'esercitazione viene illustrato come eseguire queste operazioni da Windows o Mac/Linux.

Nota

Per completare l'esercitazione, è necessario un account Azure. È possibile attivare i vantaggi della sottoscrizione Visual Studio o iscriversi per una versione di valutazione gratuita.

Nota

Per iniziare a usare Servizio app di Azure prima di registrarsi per ottenere un account Azure, andare a Prova il servizio app, dove è possibile creare un'app Web iniziale temporanea nel servizio app. Non è necessario fornire una carta di credito né impegnarsi in alcun modo.

Prerequisiti

Nota: la pubblicazione TFS non è attualmente supportata per progetti Python.

Windows

Se non è già installato Python 2.7 o 3.4 (32 bit), si consiglia di installare Azure SDK per Python 2.7 o Azure SDK per Python 3.4 mediante Installazione guidata piattaforma Web. In tal modo viene installata la versione a 32 bit di Python, setuptools, pip, virtualenv e così via (Python a 32 bit è la versione installata sui computer host di Azure). In alternativa, è possibile ottenere Python da python.org.

Per Git, è consigliabile Git per Windows o GitHub per Windows. Se si utilizza Visual Studio, è possibile utilizzare il supporto Git integrato.

È inoltre consigliabile installare Python Tools 2.2 per Visual Studio. Si tratta di un'operazione facoltativa, ma se si dispone di Visual Studio, inclusa la versione gratuita di Visual Studio Community 2013 o Visual Studio Express 2013 per il Web, si otterrà anche l'IDE Python.

Mac/Linux

È necessario avere già installato Python e Git, ma assicurarsi di disporre di Python 2.7 o 3.4.

Creazione di un'app Web nel portale di Azure

Il primo passaggio per la creazione di un'app consiste nella creazione dell'app Web tramite il portale di Azure.

  1. Accedere al portale di Azure e scegliere il nuovo pulsante nell'angolo inferiore sinistro.
  2. Nella casella di ricerca digitare "python".
  3. Nei risultati della ricerca selezionare Bottle e quindi fare clic su Crea.
  4. Configurare la nuova app Bottle, ad esempio creando un nuovo piano di servizio app e un nuovo gruppo di risorse correlato. Fare quindi clic su Crea.
  5. Configurare la pubblicazione Git per l'app Web appena creata seguendo le istruzioni disponibili in Distribuzione del repository Git locale nel servizio app di Azure.

Informazioni generali sull'applicazione

Contenuti del repository Git

Di seguito viene fornita una panoramica dei file contenuti nel repository Git iniziale, che saranno clonati nella sezione successiva.

\routes.py
\static\content\
\static\fonts\
\static\scripts\
\views\about.tpl
\views\contact.tpl
\views\index.tpl
\views\layout.tpl

Fonti principali per l'applicazione. È composta da 3 pagine (indice, informazioni su, contatti) con un layout master. Il contenuto statico e gli script includono bootstrap, jquery, modernizr e respond.

\app.py

Supporto del server di sviluppo locale. Consente di eseguire l'applicazione localmente.

\BottleWebProject.pyproj
\BottleWebProject.sln

File di progetto da utilizzare con Python Tools per Visual Studio.

\ptvs_virtualenv_proxy.py

Proxy IIS per ambienti virtuali e supporto del debug remoto PTVS.

\requirements.txt

Pacchetti esterni necessari da parte di questa applicazione. Lo script di distribuzione eseguirà l'installazione di pip dei pacchetti elencati in questo file.

\web.2.7.config
\web.3.4.config

File di configurazione IIS. Lo script di distribuzione utilizzerà il file appropriato web.x.y.config e lo copierà come web.config.

File facoltativi - Personalizzazione della distribuzione

Per stabilire se l'applicazione usa Python, Azure verifica se entrambe le condizioni seguenti sono soddisfatte:

  • Presenza del file requirements.txt nella cartella radice
  • Presenza di un qualsiasi file .py nella cartella radice OPPURE di un file runtime.txt in cui viene specificato python

In tale circostanza, userà uno script di distribuzione specifico di Python che eseguirà la sincronizzazione standard dei file, oltre ad operazioni aggiuntive di Python, tra cui:

  • Gestione automatica dell'ambiente virtuale
  • Installazione dei pacchetti elencati in requirements.txt tramite pip
  • Creazione del file web.config appropriato sulla base della versione di Python selezionata
  • Raccolta di file statici per le applicazioni Django

È possibile controllare determinati aspetti della procedura di distribuzione predefinita senza dover personalizzare lo script.

Per ignorare tutti i passaggi della distribuzione specifici di Python, è possibile creare questo file vuoto:

\.skipPythonDeployment

Per un maggiore controllo sulla distribuzione, è possibile eseguire l'override dello script di distribuzione predefinito creando i file seguenti:

\.deployment
\deploy.cmd

Per creare i file, è possibile usare l'interfaccia della riga di comando di Azure. Usare questo comando dalla cartella del progetto:

azure site deploymentscript --python

Se questi file non esistono, Azure creerà uno script di distribuzione temporaneo e lo eseguirà. Tale file è identico a quello creato con il comando precedente.

File facoltativi - Runtime Python

Per determinare la versione di Python da usare per l'ambiente virtuale di Python, viene applicata la seguente priorità:

  1. versione specificata nel file runtime.txt nella cartella radice
  2. versione specificata dall'impostazione di Python nella configurazione dell'app Web (pannello Impostazioni > Impostazioni applicazione dell'app Web nel portale di Azure)
  3. Se non viene specificata nessuna delle versioni sopra indicate, verrà usata quella predefinita, ovvero python-2.7.

I valori validi per il contenuto di

\runtime.txt

sono:

  • python-2.7
  • python-3.4

L'eventuale microversione (terza cifra) specificata verrà ignorata.

Altri file sul server

Alcuni file sono presenti sul server ma non vengono aggiunti al repository Git. Si tratta di file creati dallo script di distribuzione.

\web.config

File di configurazione IIS. Creato da web.x.y.config per ogni distribuzione.

\env\

Ambiente virtuale Python. Creato durante la distribuzione se sul sito non esiste già un ambiente virtuale compatibile. I pacchetti elencati in requirements.txt vengono installati con pip. Tuttavia, se i pacchetti sono installati, l'installazione di pip non verrà eseguita.

Nelle tre sezioni successive viene descritto come procedere con lo sviluppo dei siti Web in tre ambienti diversi:

  • Windows, con Python Tools per Visual Studio
  • Windows, con la riga di comando
  • Mac/Linux, con la riga di comando

Sviluppo di app Web - Windows - Python Tools per Visual Studio

Clonare il repository

Innanzitutto, clonare il repository utilizzando l'URL fornito sul portale di Azure. Per altre informazioni, vedere Distribuzione del repository Git locale nel servizio app di Azure.

Aprire il file della soluzione (.sln) incluso nella radice del repository.

Creare l'ambiente virtuale

A questo punto verrà creato un ambiente virtuale per lo sviluppo locale. Fare clic con il pulsante destro del mouse su Python Environments (Ambienti Python) e selezionare Add Virtual Environment... (Aggiungi ambiente virtuale...).

  • Assicurarsi che il nome dell'ambiente sia env.
  • Selezionare l'interprete di base. Assicurarsi di utilizzare la stessa versione di Python è selezionata per l'applicazione web (in runtime.txt o le impostazioni dell'applicazione blade dell'applicazione web nel portale di Azure).
  • Assicurarsi che l'opzione per scaricare e installare i pacchetti sia selezionata.

Fare clic su Create. In tal modo verrà creato l'ambiente virtuale e verranno installate le dipendenze elencate in requirements.txt.

Eseguire mediante il server di sviluppo

Premere F5 per avviare il debug. Il Web browser si aprirà automaticamente sulla pagina in esecuzione locale.

È possibile impostare punti di interruzione nelle origini, utilizzare le finestre Espressioni di controllo e così via. Per altre informazioni sulle varie funzionalità, vedere la documentazione di Python Tools per Visual Studio.

Apportare modifiche

È possibile sperimentare apportando modifiche alle origini applicazioni e/o ai modelli.

Dopo aver testato le modifiche, eseguirne il commit al repository Git:

Installare altri pacchetti

L'applicazione può avere altre dipendenze oltre Python e Bottle.

È possibile installare altri pacchetti utilizzando pip. Per installare un pacchetto, fare clic con il pulsante destro del mouse e selezionare Installa pacchetto Python.

Ad esempio, per installare Azure SDK per Python, che fornisce l'accesso all'archivio Azure, al bus di servizio e ad altri servizi Azure, immettere azure:

Fare clic con il pulsante destro del mouse sull'ambiente virtuale e selezionare Genera requirements.txt per aggiornare requirements.txt.

Quindi, eseguire il commit delle modifiche a requirements.txt al repository Git.

Distribuzione in Azure

Per attivare una distribuzione, fare clic su Sincronizza o su Push. La sincronizzazione esegue sia il push che il pull.

La prima distribuzione richiederà un po' di tempo, in quanto verrà creato un ambiente virtuale, si installeranno i pacchetti e così via.

In Visual Studio non viene visualizzato l'avanzamento della distribuzione. Se si desidera rivedere l'output, vedere la sezione in Risoluzione dei problemi- Distribuzione.

Passare all'URL di Azure per visualizzare le modifiche.

Sviluppo di app Web - Windows - Riga di comando

Clonare il repository

Innanzitutto, clonare il repository utilizzando l'URL fornito sul portale di Azure e aggiungere il repository di Azure come remoto. Per altre informazioni, vedere Distribuzione del repository Git locale nel servizio app di Azure.

git clone <repo-url>
cd <repo-folder>
git remote add azure <repo-url> 

Creare l'ambiente virtuale

Verrà creato un nuovo ambiente virtuale per lo sviluppo (non aggiungerlo al repository). Non è possibile cambiare la posizione degli ambienti virtuali in Python, pertanto, ciascuno sviluppatore che lavora all'applicazione ne creerà una locale.

Assicurarsi di utilizzare la stessa versione di Python selezionata per l'app web (in runtime.txt o nel pannello delle impostazioni dell'applicazione per l’app web nel portale di Azure).

Per Python 2.7:

c:\python27\python.exe -m virtualenv env

Per Python 3.4:

c:\python34\python.exe -m venv env

Installare tutti i pacchetti esterni richiesti dall'applicazione. È possibile utilizzare il file requirements.txt nella radice del repository per installare i pacchetti nell'ambiente virtuale:

env\scripts\pip install -r requirements.txt

Eseguire mediante il server di sviluppo

È possibile avviare l'applicazione in un server di sviluppo con il seguente comando:

env\scripts\python app.py

Sulla console verranno visualizzati l'URL e la porta su cui è in ascolto il server:

Quindi, aprire il Web browser su tale URL.

Apportare modifiche

È possibile sperimentare apportando modifiche alle origini applicazioni e/o ai modelli.

Dopo aver testato le modifiche, eseguirne il commit al repository Git:

git add <modified-file>
git commit -m "<commit-comment>"

Installare altri pacchetti

L'applicazione può avere altre dipendenze oltre Python e Bottle.

È possibile installare altri pacchetti utilizzando pip. Ad esempio, per installare Azure SDK per Python,che fornisce l'accesso all'archivio Azure, al bus di servizio e ad altri servizi Azure, digitare:

env\scripts\pip install azure

Assicurarsi di aggiornare requirements.txt:

env\scripts\pip freeze > requirements.txt

Eseguire il commit delle modifiche:

git add requirements.txt
git commit -m "Added azure package"

Distribuzione in Azure

Per attivare una distribuzione, eseguire il push delle modifiche in Azure:

git push azure master

Verrà visualizzato l'output dello script di distribuzione, inclusa la creazione dell'ambiente virtuale, l'installazione di pacchetti, la creazione di web.config.

Passare all'URL di Azure per visualizzare le modifiche.

Sviluppo del sito Web - Mac/Linux - Riga di comando

Clonare il repository

Innanzitutto, clonare il repository utilizzando l'URL fornito sul portale di Azure e aggiungere il repository di Azure come remoto. Per altre informazioni, vedere Distribuzione del repository Git locale nel servizio app di Azure.

git clone <repo-url>
cd <repo-folder>
git remote add azure <repo-url> 

Creare l'ambiente virtuale

Verrà creato un nuovo ambiente virtuale per lo sviluppo (non aggiungerlo al repository). Non è possibile cambiare la posizione degli ambienti virtuali in Python, pertanto, ciascuno sviluppatore che lavora all'applicazione ne creerà una locale.

Assicurarsi di utilizzare la stessa versione di Python è selezionata per l'applicazione web (in runtime.txt o blade le impostazioni dell'applicazione dell'applicazione web nel portale di Azure).

Per Python 2.7:

python -m virtualenv env

Per Python 3.4:

python -m venv env

o pyvenv env

Installare tutti i pacchetti esterni richiesti dall'applicazione. È possibile utilizzare il file requirements.txt nella radice del repository per installare i pacchetti nell'ambiente virtuale:

env/bin/pip install -r requirements.txt

Eseguire mediante il server di sviluppo

È possibile avviare l'applicazione in un server di sviluppo con il seguente comando:

env/bin/python app.py

Sulla console verranno visualizzati l'URL e la porta su cui è in ascolto il server:

Quindi, aprire il Web browser su tale URL.

Apportare modifiche

È possibile sperimentare apportando modifiche alle origini applicazioni e/o ai modelli.

Dopo aver testato le modifiche, eseguirne il commit al repository Git:

git add <modified-file>
git commit -m "<commit-comment>"

Installare altri pacchetti

L'applicazione può avere altre dipendenze oltre Python e Bottle.

È possibile installare altri pacchetti utilizzando pip. Ad esempio, per installare Azure SDK per Python,che fornisce l'accesso all'archivio Azure, al bus di servizio e ad altri servizi Azure, digitare:

env/bin/pip install azure

Assicurarsi di aggiornare requirements.txt:

env/bin/pip freeze > requirements.txt

Eseguire il commit delle modifiche:

git add requirements.txt
git commit -m "Added azure package"

Distribuzione in Azure

Per attivare una distribuzione, eseguire il push delle modifiche in Azure:

git push azure master

Verrà visualizzato l'output dello script di distribuzione, inclusa la creazione dell'ambiente virtuale, l'installazione di pacchetti, la creazione di web.config.

Passare all'URL di Azure per visualizzare le modifiche.

Risoluzione dei problemi - Installazione dei pacchetti

Alcuni pacchetti potrebbero non essere installati tramite pip se eseguiti su Azure. Il motivo può essere semplicemente dovuto al fatto che il pacchetto non è disponibile nell'indice del pacchetto Python. Potrebbe essere necessario un compilatore (se non è disponibile alcun compilatore nel computer che esegue il sito Web di Azure).

In questa sezione vengono esaminati alcuni metodi utili per risolvere questo problema.

Richiedere i file wheel

Se per l'installazione del pacchetto è necessario un compilatore, provare a contattare il proprietario del pacchetto per richiedere che vengano resi disponibili i file wheel per il pacchetto.

Grazie alla recente disponibilità del compilatore Microsoft Visual C++ per Python 2.7, è ora più facile compilare pacchetti con codice nativo per Python 2.7.

Creare i file wheel (richiede Windows)

quando si usa questa opzione, assicurarsi di compilare il pacchetto usando un ambiente Python corrispondente alla combinazione di piattaforma/architettura/versione usata nel sito Web di Azure (Windows/32 bit/2.7 o 3.4).

Se il pacchetto non viene installato perché richiede un compilatore, è possibile installare il compilatore nel computer locale e creare un file wheel per il pacchetto, da includere quindi nel repository.

Utenti Mac/Linux: se non si ha accesso a un computer Windows, vedere Creare una macchina virtuale che esegue Windows per informazioni su come creare una VM in Azure. È possibile usare la macchina virtuale per creare i file wheel, aggiungerli al repository e quindi eliminare la macchina virtuale se lo si desidera.

Per Python 2.7, è possibile installare il compilatore Microsoft Visual C++ per Python 2.7.

Per Python 3.4, è possibile installare Microsoft Visual C++ 2010 Express.

Per creare i file wheel, sarà necessario il pacchetto wheel:

env\scripts\pip install wheel

Usare pip wheel per compilare una dipendenza:

env\scripts\pip wheel azure==0.8.4

Verrà creato un file con estensione whl nella cartella \wheelhouse. Aggiungere la cartella \wheelhouse e i file wheel nel repository.

Modificare requirements.txt per aggiungere l'opzione --find-links nella parte superiore. In questo modo, si indica a pip di cercare una corrispondenza esatta nella cartella locale prima di passare all'indice del pacchetto Python.

--find-links wheelhouse
azure==0.8.4

Per includere tutte le dipendenze nella cartella \wheelhouse senza usare del tutto l'indice del pacchetto Python, è possibile forzare pip in modo che ignori l'indice del pacchetto aggiungendo --no-index nella parte superiore di requirements.txt.

--no-index

Personalizzare l'installazione

È possibile personalizzare lo script di distribuzione in modo da installare un pacchetto nell'ambiente virtuale usando un programma di installazione alternativo, come easy_install. Per un esempio impostato come commento, vedere deploy.cmd. Assicurarsi che questi pacchetti non siano elencati in requirements.txt, in modo da impedirne l'installazione da parte di pip.

Aggiungere questa riga allo script di distribuzione:

env\scripts\easy_install somepackage

Si potrebbe anche usare easy_install per eseguire l'installazione da un programma di installazione EXE (alcuni sono compatibili con il formato ZIP e sono quindi supportati da easy_install). Aggiungere il programma di installazione nel repository e richiamare easy_install passando il percorso del file eseguibile.

Aggiungere questa riga allo script di distribuzione:

env\scripts\easy_install "%DEPLOYMENT_SOURCE%\installers\somepackage.exe"

Includere l'ambiente virtuale nel repository (richiede Windows)

quando si usa questa opzione, assicurarsi di usare un ambiente virtuale corrispondente alla combinazione di piattaforma/architettura/versione usata nel sito Web di Azure (Windows/32 bit/2.7 o 3.4).

Se si include l'ambiente virtuale nel repository, è possibile impedire allo script di distribuzione di eseguire la gestione dell'ambiente virtuale in Azure creando un file vuoto:

.skipPythonDeployment

È preferibile eliminare l'ambiente virtuale nel sito, per evitare la presenza di file rimasti in seguito alla gestione automatica dell'ambiente virtuale.

Risoluzione dei problemi - Ambiente virtuale

Lo script di distribuzione ignorerà la creazione dell'ambiente virtuale in Azure se rileva che esiste già un ambiente virtuale compatibile. Questo comportamento può accelerare notevolmente la distribuzione. I pacchetti già installati verranno ignorati da pip.

In determinate situazioni, può essere utile forzare l'eliminazione dell'ambiente virtuale, ad esempio quando si decide di includere un ambiente virtuale come parte del repository oppure quando è necessario eliminare alcuni pacchetti o testare le modifiche apportate a requirements.txt.

Sono disponibili alcune opzioni per gestire l'ambiente virtuale in Azure.

Opzione 1: Utilizzare il FTP

Con un client FTP connettersi al server per eliminare la cartella env. Tenere presente che alcuni client FTP, come i Web browser, possono essere di sola lettura e non consentire l'eliminazione di cartelle. Per questo motivo, è bene assicurarsi di usare un client FTP con questa funzionalità. Nome host e utente FTP sono visualizzati nel pannello dell'app Web nel portale di Azure.

Opzione 2: Attiva/Disattiva runtime

Ecco un'alternativa che sfrutta il fatto che lo script di distribuzione eliminerà la cartella env quando non corrisponde alla versione desiderata di Python. In questo modo viene effettivamente eliminato l'ambiente esistente e ne viene creato uno nuovo.

  1. Passare a una versione diversa di Python (tramite runtime.txt o le impostazioni dell'applicazione blade nel portale di Azure)
  2. Eseguire il push GIT di alcune modifiche (ignorare eventuali errori di installazione di pip)
  3. Tornare alla versione iniziale di Python
  4. Eseguire di nuovo il push GIT di alcune modifiche

Opzione 3: personalizzare lo script di distribuzione

Se lo script di distribuzione è stato personalizzato, è possibile modificare il codice in deploy.cmd per forzare l'eliminazione della cartella env.

Passaggi successivi

Visitare i seguenti collegamenti per altre informazioni su Bottle e Python Tools per Visual Studio:

Per informazioni sull'uso di Archiviazione tabelle di Azure e MongoDB:

Modifiche apportate