Skip to main content

Como configurar o projeto Python para os GitHub Codespaces

Comece o projeto Python nos GitHub Codespaces criando um contêiner de desenvolvimento personalizado.

Introdução

Este guia mostra como configurar o projeto Python nos Codespaces usando o aplicativo da área de trabalho do Visual Studio Code ou o cliente Web do VS Code. Será mostrado um exemplo de abertura do projeto em um codespace e da adição e da modificação de uma configuração de contêiner de desenvolvimento predefinido.

Pré-requisitos

  • Você deve ter um projeto Python existente em um repositório em GitHub.com. Caso você não tenha um projeto, experimente este tutorial com o seguinte exemplo: https://github.com/2percentsilk/python-quickstart.
  • O GitHub Codespaces precisa estar habilitado para a organização.

Etapa 1: Abra o seu projeto em um codespace

  1. No nome do repositório, use o menu suspenso Código e, na guia Codespaces, clique no ícone de adição ().

    Botão de codespace novo

Ao criar um código, seu projeto será criado em uma VM remota dedicada a você. Por padrão, o contêiner para o seu código possui muitas linguagens e tempos de execução, incluindo Node.js, JavaScript, Typescript, nvm, npm e yarn. Ele também inclui um conjunto comum de ferramentas, como git, wget, rsync, openssh e nano.

You can customize your codespace by adjusting the amount of vCPUs and RAM, adding dotfiles to personalize your environment, or by modifying the tools and scripts installed. For more information, see "Customizing your codespace."

GitHub Codespaces uses a file called devcontainer.json to configure the development container that you use when you work in a codespace. Each repository can contain one or more devcontainer.json files, to give you exactly the development environment you need to work on your code in a codespace.

On launch, GitHub Codespaces uses a devcontainer.json file, and any dependent files that make up the dev container configuration, to install tools and runtimes, and perform other setup tasks that the project requires. For more information, see "Introduction to dev containers." principal

Etapa 2: Adicionar uma configuração de contêiner de desenvolvimento ao repositório com base em um modelo

O contêiner de desenvolvimento padrão, ou "contêiner de desenvolvimento", para GitHub Codespaces vem com a versão mais recente do Python, gerenciadores de pacotes (pip, Miniconda) e outras ferramentas comuns pré-instaladas. No entanto, recomendamos que você configure seu próprio contêiner de desenvolvimento para incluir todas as ferramentas e scripts necessários ao projeto. Isso garantirá um ambiente reprodutível para todos os usuários de GitHub Codespaces do seu repositório.

Para configurar seu repositório e usar um contêiner de desenvolvimento personalizado, você precisará criar um ou mais arquivos devcontainer.json. Você pode adicioná-los usando um modelo de configuração predefinido, no Visual Studio Code ou pode criar um. Para saber mais sobre contêineres de desenvolvimento, confira "Introdução aos contêineres de desenvolvimento".

  1. Acesse o Visual Studio Code Command Palette (Shift+Command+P (Mac)/Ctrl+Shift+P (Windows/Linux)) e comece a digitar "dev container". Selecione Codespaces: Adicionar Arquivos de Configuração de Contêiner de Desenvolvimento… .

    "Codespaces: Adicionar Arquivos de Configuração de Contêiner de Desenvolvimento..." em Visual Studio Code Command Palette

  2. Para este exemplo, clique em Python 3. Se precisar de funcionalidades adicionais, você poderá selecionar qualquer contêiner específico para Python ou uma combinação de ferramentas como Python 3 e PostgreSQL. Seleção da opção Python na lista

  3. Clique na versão recomendada do Python. Seleção da versão do Python

  4. Aceite a opção padrão para adicionar Node.js à sua personalização. Adicionar a seleção do Node.js 1. Acesse a VS Code Command Palette (Shift+Command+P [no Mac] / Ctrl+Shift+P [no Windows/Linux]) e comece a digitar "recriar". Selecione Codespaces: Recompilar Contêiner.

    Captura de tela do comando Rebuild Container no Command Pallette

    Dica: ocasionalmente, convém executar uma recompilação completa para limpar o cache e recompilar o contêiner com imagens novas. Para obter mais informações, confira "Executar uma recompilação completa de um contêiner".

Anatomia do seu contêiner de desenvolvimento

A adição do modelo de contêiner de desenvolvimento Python adiciona um diretório .devcontainer à raiz do repositório do projeto com os seguintes arquivos:

  • devcontainer.json
  • Dockerfile

O arquivo devcontainer.json recém-adicionado define algumas propriedades descritas após o exemplo.

devcontainer.json

{
    "name": "Python 3",
    "build": {
        "dockerfile": "Dockerfile",
        "context": "..",
        "args": {
            // Update 'VARIANT' to pick a Python version: 3, 3.6, 3.7, 3.8, 3.9
            "VARIANT": "3",
            // Options
            "INSTALL_NODE": "true",
            "NODE_VERSION": "lts/*"
        }
    },

    // Set *default* container specific settings.json values on container create.
    "settings": {
        "terminal.integrated.shell.linux": "/bin/bash",
        "python.pythonPath": "/usr/local/bin/python",
        "python.linting.enabled": true,
        "python.linting.pylintEnabled": true,
        "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8",
        "python.formatting.blackPath": "/usr/local/py-utils/bin/black",
        "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf",
        "python.linting.banditPath": "/usr/local/py-utils/bin/bandit",
        "python.linting.flake8Path": "/usr/local/py-utils/bin/flake8",
        "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy",
        "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle",
        "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle",
        "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint"
    },

    // Add the IDs of extensions you want installed when the container is created.
    "extensions": [
        "ms-python.python"
    ],

    // Use 'forwardPorts' to make a list of ports inside the container available locally.
    // "forwardPorts": [],

    // Use 'postCreateCommand' to run commands after the container is created.
    // "postCreateCommand": "pip3 install --user -r requirements.txt",

    // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
    "remoteUser": "vscode"
}
  • nome – Dê qualquer nome ao contêiner de desenvolvimento, esse é apenas o padrão.
  • build – As propriedades de build.
    • dockerfile – No objeto de build, dockerfile contém o caminho para o Dockerfile que também foi adicionado do modelo.
    • args
      • variante: esse arquivo contém um só argumento de build, que é a variante do Node transmitida para o Dockerfile que desejamos usar.
  • configurações – são configurações do Visual Studio Code.
    • terminal.integrated.shell.linux – Embora o Bash seja o padrão aqui, você pode usar outros shells de terminal modificando isso.
  • extensões – são extensões incluídas por padrão.
    • ms-python.python – A extensão do Microsoft Python fornece suporte avançado para a linguagem Python (em todas as versões ativamente compatíveis da linguagem: >=3.6), incluindo recursos como IntelliSense, lint, depuração, navegação pelo código, formatação de código, refatoração, gerenciador de variáveis, gerenciador de testes, entre outros.
  • forwardPorts – Todas as portas listadas aqui serão encaminhadas automaticamente. Para obter mais informações, confira "Como encaminhar portas no seu codespace".
  • postCreateCommand – use para executar comandos que não são definidos no Dockerfile, como pip3 install -r requirements, depois que o codespace for criado.
  • remoteUser – Por padrão, você executa o código como o usuário vscode, mas, opcionalmente, pode definir isso como root.

Dockerfile

# [Choice] Python version: 3, 3.9, 3.8, 3.7, 3.6
ARG VARIANT="3"
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}

# [Option] Install Node.js
ARG INSTALL_NODE="true"
ARG NODE_VERSION="lts/*"
RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi

# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image.
# COPY requirements.txt /tmp/pip-tmp/
# RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
#    && rm -rf /tmp/pip-tmp

# [Optional] Uncomment this section to install additional OS packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
#     && apt-get -y install --no-install-recommends <your-package-list-here>

# [Optional] Uncomment this line to install global node packages.
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1

Você pode usar o arquivo Docker para adicionar camadas adicionais de contêiner para especificar os pacotes do OS, versões de nó ou pacotes globais que queremos que sejam incluídos no nosso contêiner.

Etapa 3: Modifique seu arquivo devcontainer.json

Com as configurações do seu contêiner de desenvolvimento adicionadas e um entendimento básico do que tudo faz, agora você pode personalizar para configurar ainda mais o seu ambiente. Neste exemplo, você irá adicionar propriedades para instalar extensões e dependências do seu projeto quando seu codespace for iniciado.

  1. No Explorer, expanda a pasta .devcontainer e selecione o arquivo devcontainer.json na árvore para abri-lo.

    Arquivo devcontainer.json no Explorador

  2. Atualize a lista extensions no arquivo devcontainer.json para adicionar algumas extensões que são úteis ao trabalhar com seu projeto.

    JSON
    "extensions": [
            "ms-python.python",
            "cstrap.flask-snippets",
            "streetsidesoftware.code-spell-checker"
        ],
  3. Remova a marca de comentário de postCreateCommand para instalar automaticamente os requisitos como parte do processo de instalação dos codespaces.

    JSON
    // Use 'postCreateCommand' to run commands after the container is created.
    "postCreateCommand": "pip3 install --user -r requirements.txt",
  4. Acesse a VS Code Command Palette (Shift+Command+P [no Mac] / Ctrl+Shift+P [no Windows/Linux]) e comece a digitar "recriar". Selecione Codespaces: Recompilar Contêiner.

    Captura de tela do comando Rebuild Container no Command Pallette

    Dica: ocasionalmente, convém executar uma recompilação completa para limpar o cache e recompilar o contêiner com imagens novas. Para obter mais informações, confira "Executar uma recompilação completa de um contêiner".

    A reconstrução dentro do seu codespace garante que as suas alterações funcionem conforme o esperado antes de realizar o commit das alterações no repositório. Se algo falhar, você será colocado em um codespace com um contêiner de recuperação que você pode reconstruir para continuar ajustando o seu contêiner.

  5. Verifique se suas alterações foram aplicadas com sucesso verificando se as extensões Code Spell Checker e Flask Snippet foram instaladas.

    Lista de extensões

Etapa 4: Execute seu aplicativo.

Na seção anterior, você usou o postCreateCommand para instalar um conjunto de pacotes por meio do pip3. Com suas dependências agora instaladas, você pode executar seu aplicativo.

  1. Execute seu aplicativo pressionando F5 ou inserindo python -m flask run no terminal do codespace.

  2. Quando o projeto for iniciado, você verá uma mensagem de notificação do sistema no canto inferior direito de VS Code, contendo um prompt para se conectar à porta que o projeto usa.

    Notificação do sistema de encaminhamento de porta

Etapa 5: Faça commit das suas alterações

Depois de realizar alterações no seu código, tanto novo código como de configuração, você deverá fazer commit das suas alterações. O commit das alterações no seu repositório garante que qualquer pessoa que crie um codespace deste repositório tenha a mesma configuração. Isto também significa que qualquer personalização que você faça, como adicionar extensões do VS Code, aparecerá para todos os usuários.

Para obter informações, confira "Como usar o controle do código-fonte no seu codespace".

Próximas etapas

Agora está tudo pronto para você começar a desenvolver o projeto Python nos GitHub Codespaces. Aqui estão alguns recursos adicionais para cenários mais avançados.