Como configurar um ambiente Python no Serviço de Aplicativo do AzureHow to set up a Python environment on Azure App Service

Important

A Microsoft está planejando reprovar as extensões do Python para o Serviço de Aplicativo, conforme descrito neste artigo em favor de uma implantação direta no Serviço de Aplicativo no Linux.Microsoft is planning to deprecate the Python extensions for App Service as described in this article in favor of a direct deployment to App Service on Linux. Enquanto isso, as extensões ainda continuam funcionando.The extensions still continue to work in the meantime. Para fazer uma implantação no Serviço de Aplicativo no Linux, confira Implantar um aplicativo Web do Python no Aplicativo Web para Contêineres.To deploy to App Service on Linux, see Deploy a Python web app in Web App for Containers.

O Serviço de Aplicativo do Azure é uma oferta de plataforma como serviço para aplicativos Web, quer eles sejam sites acessados por meio de um navegador, APIs REST usadas por seus próprios clientes ou processamento disparado por evento.Azure App Service is a platform-as-a-service offering for web apps, whether they are sites accessed through a browser, REST APIs used by your own clients, or event-triggered processing. O Serviço de Aplicativo dá suporte total ao uso do Python para implementar aplicativos.App Service fully supports using Python to implement apps.

O suporte personalizável ao Python no Serviço de Aplicativo do Azure é fornecido como um conjunto de extensões de site do Serviço de Aplicativo e cada uma contém uma versão específica do tempo de execução do Python.Customizable Python support for Azure App Service is provided as a set of App Service site extensions that each contain a specific version of the Python runtime. Assim, você pode instalar qualquer pacote desejado diretamente no ambiente, conforme descrito neste artigo.You can then install any desired packages directly into that environment, as described in this article. Ao personalizar o ambiente no próprio Serviço de Aplicativo, você não precisa manter pacotes em seus projetos de aplicativo Web ou carregá-los com o código do aplicativo.By customizing the environment in the App Service itself, you don't need to maintain packages in your web app projects or upload them with the app code.

Tip

Embora o Serviço de Aplicativo tenha o Python 2.7 e o Python 3.4 instalados em pastas raiz no servidor por padrão, você não pode personalizar ou instalar pacotes nesses ambientes, nem deve depender da presença deles.Although App Service by default has Python 2.7 and Python 3.4 installed in root folders on the server, you cannot customize or install packages in these environments, nor should you depend on their presence. Em vez disso, você deve confiar em uma extensão de site que você controle, conforme descrito neste artigo.You should instead rely on a site extension that you control, as described in this article.

Escolher uma versão do Python por meio do portal do AzureChoose a Python version through the Azure portal

  1. Crie um Serviço de Aplicativo para seu aplicativo Web no Portal do Azure.Create an App Service for your web app on the Azure portal.
  2. Na página do Serviço de Aplicativo, role até a seção Ferramentas de Desenvolvimento, selecione Extensões e, em seguida, selecione + Adicionar.On the App Service's page, scroll to the Development Tools section, select Extensions, then select + Add.
  3. Role para baixo na lista para a extensão que contém a versão do Python que você deseja:Scroll down in the list to the extension that contains the version of Python you want:

    Portal do Azure mostrando extensões do Python

    Tip

    Se você precisar de uma versão mais antiga do Python e ela não estiver listada nas extensões de site, ainda poderá instalá-la por meio do Azure Resource Manager, conforme descrito na próxima seção.If you need an older version of Python and don't see it listed in the site extensions, you can still install it through the Azure Resource Manager as described in the next section.

  4. Selecione a extensão, aceite os termos legais e selecione OK.Select the extension, accept the legal terms, then select OK.

  5. Uma notificação será exibida no portal quando a instalação for concluída.A notification appears in the portal when installation is complete.

Escolher uma versão do Python por meio do Azure Resource ManagerChoose a Python version through the Azure Resource Manager

Se você estiver implantando um Serviço de Aplicativo com um modelo do Azure Resource Manager, adicione a extensão de site como um recurso.If you are deploying an App Service with an Azure Resource Manager template, add the site extension as a resource. Especificamente, a extensão é exibida como um recurso aninhado (um objeto resources em resources) com o tipo siteextensions e o nome de siteextensions.net.Specifically, the extension appears as a nested resource (a resources object under resources) with the type siteextensions and the name from siteextensions.net.

Por exemplo, depois de adicionar uma referência a python361x64 (Python 3.6.1 x64), o modelo poderá ficar parecido com o seguinte (algumas propriedades foram omitidas):For example, after adding a reference to python361x64 (Python 3.6.1 x64), your template may look like the following (some properties omitted):

"resources": [
  {
    "apiVersion": "2015-08-01",
    "name": "[parameters('siteName')]",
    "type": "Microsoft.Web/sites",

    // ...

    "resources": [
      {
        "apiVersion": "2015-08-01",
        "name": "python361x64",
        "type": "siteextensions",
        "properties": { },
        "dependsOn": [
          "[resourceId('Microsoft.Web/sites', parameters('siteName'))]"
        ]
      },
      // ...
    ]
  }

Configurar o web.config para apontar para o interpretador do PythonSet web.config to point to the Python interpreter

Depois de instalar a extensão de site (por meio do portal ou de um modelo do Azure Resource Manager), você aponta o arquivo web.config do seu aplicativo para o interpretador do Python.After installing the site extension (through either the portal or an Azure Resource Manager template), you next point your app's web.config file to the Python interpreter. O arquivo web.config instrui o servidor Web do IIS (7+) em execução no Serviço de Aplicativo sobre como ele deve tratar as solicitações do Python, sendo por meio de FastCGI ou de HttpPlatform.The web.config file instructs the IIS (7+) web server running on App Service about how it should handle Python requests through either FastCGI or HttpPlatform.

Comece localizando o caminho completo para o python.exe da extensão de site, depois crie e modifique o arquivo web.config apropriado.Begin by finding the full path to the site extension's python.exe, then create and modify the appropriate web.config file.

Localizar o caminho para python.exeFind the path to python.exe

Uma extensão de site do Python é instalada no servidor em d:\home em uma pasta apropriada para a versão e arquitetura do Python (exceto no caso de algumas versões mais antigas).A Python site extension is installed on the server under d:\home in a folder appropriate to the Python version and architecture (except in the case of a few older versions). Por exemplo, o Python 3.6.1 x64 é instalado em d:\home\python361x64.For example, Python 3.6.1 x64 is installed in d:\home\python361x64. Assim, o caminho completo para o interpretador do Python é d:\home\python361x64\python.exe.The full path to the Python interpreter is then d:\home\python361x64\python.exe.

Para ver o caminho específico no Serviço de Aplicativo, selecione Extensões na página do Serviço de Aplicativo e, em seguida, selecione a extensão na lista.To see the specific path on your App Service, select Extensions on the App Service page, then select the extension in the list.

Lista de extensão no Serviço de Aplicativo do Azure

Essa ação abre a página de descrição da extensão que contém o caminho:This action opens the extension's description page containing the path:

Detalhes de extensão no Serviço de Aplicativo do Azure

Se tiver problemas para ver o caminho para a extensão, você poderá encontrá-la manualmente usando o console:If you have trouble seeing the path for the extension, you can find it manually using the console:

  1. Na página do Serviço de Aplicativo, selecione Ferramentas de Desenvolvimento > Console.On your App Service page, select the Development Tools > Console.
  2. Digite o comando ls ../home ou dir ..\home para ver as pastas de extensões de nível superior, como Python361x64.Enter the command ls ../home or dir ..\home to see the top-level extensions folders, such as Python361x64.
  3. Digite um comando como ls ../home/python361x64 ou dir ..\home\python361x64 para verificar se ela contém o python.exe e outros arquivos de interpretador.Enter a command like ls ../home/python361x64 or dir ..\home\python361x64 to verify that it contains python.exe and other interpreter files.

Configurar o manipulador do FastCGIConfigure the FastCGI handler

O FastCGI é uma interface que funciona no nível da solicitação.FastCGI is an interface that works at the request level. O IIS recebe conexões de entrada e encaminha cada solicitação para um aplicativo WSGI em execução em um ou mais processos Python persistentes.IIS receives incoming connections and forwards each request to a WSGI app running in one or more persistent Python processes. O pacote wfastcgi é pré-instalado e configurado com cada extensão de site do Python, portanto você pode habilitá-lo facilmente incluindo o código em web.config como mostrado abaixo para um aplicativo Web com base na estrutura Bottle.The wfastcgi package is pre-installed and configured with each Python site extension, so you can easily enable it by including the code in web.config like what's shown below for a web app based on the Bottle framework. Observe que os caminhos completos para python.exe e wfastcgi.py são colocados na chave PythonHandler:Note that the full paths to python.exe and wfastcgi.py are placed in the PythonHandler key:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
    <!-- The handler here is specific to Bottle; other frameworks vary. -->
    <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
  </appSettings>
  <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>
</configuration>

As <appSettings> definidas aqui estão disponíveis para seu aplicativo como variáveis de ambiente:The <appSettings> defined here are available to your app as environment variables:

  • O valor de PYTHONPATH pode ser estendido livremente, mas deve incluir a raiz do seu aplicativo.The value for PYTHONPATH may be freely extended but must include the root of your app.
  • WSGI_HANDLER deve apontar para um aplicativo WSGI importável do seu aplicativo.WSGI_HANDLER must point to a WSGI app importable from your app.
  • WSGI_LOG é opcional, mas recomendado para depuração do seu aplicativo.WSGI_LOG is optional but recommended for debugging your app.

Confira Publicar no Azure para obter detalhes adicionais sobre conteúdos de web.config para aplicativos Web de Bottle, Flask e Django.See Publish to Azure for additional details on web.config contents for Bottle, Flask, and Django web apps.

Configurar o manipulador HttpPlatformConfigure the HttpPlatform handler

O módulo HttpPlatform passa conexões de soquete diretamente para um processo de Python autônomo.The HttpPlatform module passes socket connections directly to a standalone Python process. Essa passagem permite que você execute qualquer servidor Web que desejar, mas requer um script de inicialização que executa um servidor Web local.This pass-through allows you to run any web server you like, but requires a startup script that runs a local web server. Você especifica o script no <httpPlatform>elemento do web.config, em que o atributo processPath aponta para o interpretador do Python da extensão de site e o atributo arguments aponta para seu script e os argumentos que você quiser fornecer:You specify the script in the <httpPlatform> element of web.config, where the processPath attribute points to the site extension's Python interpreter and the arguments attribute points to your script and any arguments you want to provide:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="D:\home\Python361x64\python.exe"
                  arguments="D:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="D:\home\LogFiles\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

A variável de ambiente HTTP_PLATFORM_PORT mostrada aqui contém a porta que o servidor local deve escutar para as conexões do localhost.The HTTP_PLATFORM_PORT environment variable shown here contains the port that your local server should listen on for connections from localhost. Este exemplo também mostra como criar outra variável de ambiente, se desejado, nesse caso SERVER_PORT.This example also shows how to create another environment variable, if desired, in this case SERVER_PORT.

Instalar pacotesInstall packages

O interpretador do Python instalado por meio de uma extensão de site é apenas uma parte do seu ambiente do Python.The Python interpreter installed through a site extension is only one piece of your Python environment. Você provavelmente precisará instalar pacotes diferentes nesse mesmo ambiente.You likely need to install different packages in that environment as well.

Para instalar pacotes diretamente no ambiente do servidor, use um dos seguintes métodos:To install packages directly in the server environment, use one of the following methods:

MétodosMethods UsoUsage
Console do Kudu do Serviço de Aplicativo do AzureAzure App Service Kudu console Instala pacotes interativamente.Installs packages interactively. Os pacotes devem ser Python puro ou publicar em wheels.Packages must be pure Python or must publish wheels.
API REST do KuduKudu REST API Pode ser usada para automatizar a instalação de pacote.Can be used to automate package installation. Os pacotes devem ser Python puro ou publicar em wheels.Packages must be pure Python or must publish wheels.
Pacote com aplicativoBundle with app Instala pacotes diretamente em seu projeto e, em seguida, implanta-os no Serviço de Aplicativo como se fizessem parte do seu aplicativo.Install packages directly into your project and then deploy them to App Service as if they were part of your app. Dependendo de quantas dependências você tem e da frequência com que você os atualiza, esse método pode ser a maneira mais fácil de dar início à implantação.Depending on how many dependencies you have and how frequently you update them, this method may be the easiest way to get a working deployment going. Esteja ciente de que as bibliotecas devem corresponder à versão do Python no servidor, caso contrário, você verá erros obscuros após a implantação.Be advised that libraries must match the version of Python on the server, otherwise you see obscure errors after deployment. Assim, como as versões do Python nas extensões de site do Serviço de Aplicativo são exatamente as mesmas que as versões lançadas em python.org, você pode obter uma versão compatível para desenvolvimento local facilmente.That said, because the versions of Python in the App Service site extensions are exactly the same as those versions released on python.org, you can easily obtain a compatible version for local development.
Ambientes virtuaisVirtual environments Sem suporte.Not supported. Em vez disso, use o agrupamento e defina a variável de ambiente PYTHONPATH para apontar para o local dos pacotes.Instead, use bundling and set the PYTHONPATH environment variable to point to the location of the packages.

Console do Kudu do Serviço de Aplicativo do AzureAzure App Service Kudu console

O console Kudu fornece acesso de linha de comando com privilégios elevados e direto para o servidor do Serviço de Aplicativo e seu sistema de arquivos.The Kudu console gives you direct, elevated command-line access to the App Service server and its file system. Isso é uma ferramenta valiosa de depuração e também permite operações de CLI, como instalação de pacotes.This is both a valuable debugging tool and allows for CLI operations such as installing packages.

  1. Abra o Kudu na sua página do Serviço de Aplicativo no Portal do Microsoft Azure, selecionando Ferramentas de Desenvolvimento > Ferramentas Avançadas e Ir.Open Kudu from your App Service page on the Azure portal by selecting Development Tools > Advanced Tools, then selecting Go. Essa ação navega até uma URL que é a mesmo que a URL base do Serviço de Aplicativo, exceto pelo .scm inserido.This action navigates to a URL that's the same as your base App Service URL except with .scm inserted. Por exemplo, se a URL base for https://vspython-test.azurewebsites.net/, o Kudu será https://vspython-test.scm.azurewebsites.net/ (que você poderá adicionar aos favoritos):For example, if your base URL is https://vspython-test.azurewebsites.net/ then Kudu is on https://vspython-test.scm.azurewebsites.net/ (which you can bookmark):

    O console do Kudu para o Serviço de Aplicativo do Azure

  2. Selecione Console de depuração > CMD para abrir o console, no qual você pode navegar em sua instalação do Python e ver quais bibliotecas já estão lá.Select Debug console > CMD to open the console, in which you can navigate into your Python installation and see what libraries are already there.

  3. Para instalar um único pacote:To install a single package:

    a.a. Navegue até a pasta da instalação do Python na qual você deseja instalar o pacote, como d:\home\python361x64.Navigate to the folder of the Python installation where you want to install the package, such as d:\home\python361x64.

    b.b. Use python.exe -m pip install <package_name> para instalar um pacote.Use python.exe -m pip install <package_name> to install a package.

    Exemplo de instalação do Bottle por meio do console do Kudu para o Serviço de Aplicativo do Azure

  4. Se você já implantou um arquivo requirements.txt para seu aplicativo no servidor, instale todos esses requisitos da seguinte maneira:If you've deployed a requirements.txt for your app to the server already, install all those requirements as follows:

    a.a. Navegue até a pasta da instalação do Python na qual você deseja instalar o pacote, como d:\home\python361x64.Navigate to the folder of the Python installation where you want to install the package, such as d:\home\python361x64.

    b.b. Execute o comando python.exe -m pip install --upgrade -r d:\home\site\wwwroot\requirements.txt.Run the command python.exe -m pip install --upgrade -r d:\home\site\wwwroot\requirements.txt.

    Usar o requirements.txt é recomendado porque é fácil reproduzir seu conjunto de pacotes exato tanto localmente quanto no servidor.Using requirements.txt is recommended because it's easy to reproduce your exact package set both locally and on the server. Lembre-se visitar o console depois de implantar as alterações no requirements.txt e execute o comando novamente.Just remember to visit the console after deploying any changes to requirements.txt and run the command again.

Note

Não há compilador de C no Serviço de Aplicativo, portanto você precisa instalar o wheel para todos os pacotes com módulos de extensão nativos.There's no C compiler on App Service, so you need to install the wheel for any packages with native extension modules. Muitos pacotes populares fornecem suas próprias rodas.Many popular packages provide their own wheels. Para pacotes que não o fazem, use pip wheel <package_name> em seu computador de desenvolvimento local e, em seguida, carregue a roda para seu site.For packages that don't, use pip wheel <package_name> on your local development computer and then upload the wheel to your site. Para obter um exemplo, confira Gerenciar pacotes necessários com requirements.txt.For an example, see Manage required packages with requirements.txt.

API REST do KuduKudu REST API

Em vez de usar o console de Kudu por meio do portal do Azure, você pode executar comandos remotamente por meio da API REST do Kudu postando o comando para https://yoursite.scm.azurewebsites.net/api/command.Instead of using the Kudu console through the Azure portal, you can run commands remotely through the Kudu REST API by posting the command to https://yoursite.scm.azurewebsites.net/api/command. Por exemplo, para instalar o pacote bottle, poste o seguinte JSON para /api/command:For example, to install the bottle package, post the following JSON to /api/command:

{
    "command": 'python.exe -m pip install bottle',
    "dir": '\home\python361x64'
}

Para obter informações sobre comandos e autenticação, consulte a Documentação do Kudu.For information about commands and authentication, see the Kudu documentation.

Você também pode ver as credenciais usando o comando az webapp deployment list-publishing-profiles através da CLI do Azure (consulte az webapp deployment).You can also see credentials using the az webapp deployment list-publishing-profiles command through the Azure CLI (see az webapp deployment). Há uma biblioteca auxiliar para publicar comandos de Kudu disponível no GitHub.A helper library for posting Kudu commands is available on GitHub.