Ferramentas do usuário

Ferramentas do site


ti_publica:dicas_python

Dicas para Python

Esse não é um tutorial, não é um guia, muito menos um guia completo. São apenas minhas anotações pessoais sobre Python que podem servir como um guia de referência rápida (Cheat Sheet).

Instalações

  • venv (equivalente ao virtualenv)
    • Isso acaba já instalando o pip3
  • Dentro do venv:
    • pip via python
      Gerenciador de pacotes. Dentro do venv instalará pacotes independentes por projeto ou versão de python.
    • pylint3
      apenas pra separar de outras versões
    • pytest3
      apenas pra separar de outras versões
    • Pro YouCompleteMe funcionar no Vim dentro de um venv de Python3 tive que instalar:
      pip install future frozendict requests requests_futures

Configurando o ambiente

Como programo sempre em ambiente Linux com o editor VIM as dicas aqui são focadas nisso.

Meu arquivo de configuração do VIM (~/.vimrc) que chama o ~/.vimrc-python:

autocmd BufNewFile *.py              :source ~/.vimrc-python
autocmd BufRead    *.py              :source ~/.vimrc-python

Meu arquivo de configuração .vimrc-python

filetype indent on
set expandtab           " enter spaces when tab is pressed
set textwidth=90        " break lines when line length increases
set tabstop=4           " use 4 spaces to represent tab
set softtabstop=4
set shiftwidth=4        " number of spaces to use for auto indent
set autoindent
set backspace=indent,eol,start
let g:syntastic_python_python_exec = '/usr/bin/python3'
let g:syntastic_python_pylint_exec = '/usr/bin/pylint3'
source $VIMRUNTIME/indent/python.vim

Verificando código

pylint

  • Integrado ao vim: verifica sempre que o arquivo é salvo
  • Sugere:
    • Melhores comandos
    • Melhores sintaxes
    • Erros de sintaxe
    • Documentação
    • etc
  • Analise se não é melhor instalar via pip dentro do venv, assim cada ambiente fica com o pylint correto direto (python2 / 3)

Uso:

  • Integrado ao vim
  • Via linha de comandos:
    pylint3 exemplo.py
  • Para obter os códigos das mensagens:
    pylint3 --msg-template='{msg_id}:{line:3d},{column}: {obj}: {msg}' exemplo.py
  • Para inibir determinada mensagem:
    • No arquivo (a partir da linha):
      # pylint: disable=C0103
    • ou:
      # pylint: disable=invalid-name
    • Numa linha:
      var = 3 # pylint: disable=C0103
    • Se precisar reabilitar (a partir da linha):
      # pylint: enable=C0103
    • Em todos os arquivos:
      • Edite o arquivo de configuração do pylint, item disable= seção [MESSAGES CONTROL]
      • Se o arquivo não existir:
        pylint3 --generate-rcfile exemplo1.py > ~/.pylintrc

black

  • Só pra formatação
  • Uso independente
  • Não destrutivo

Testes com pytest

A ideia é que você crie um programa que vá testar seu código. O pytest é uma ferramenta que vai facilitar isso.

Exemplo de código:

def bubble_sort(lista):
    """Ordenação via algorítimo Bubble Sort"""
 
    for passnum in range(len(lista)-1, 0, -1):
        mudou = False
        for i in range(passnum):
            if lista[i] > lista[i+1]:
                lista[i], lista[i+1] = lista[i+1], lista[i]
                print(lista)
                mudou = True
        if not mudou:
            return lista
    return lista

Exemplo de programa que testa o código:

# -*- coding: UTF-8 -*-
 
import pytest
import semana5
 
class Testa_semana5_bubble():
 
    @pytest.mark.parametrize("lista, resultado", [
        ([5, 1, 4, 2], [1, 2, 4, 5]),
        ([12, 13, 14, 11], [11, 12, 13, 14]),
        ([12, 13, -2, 14, 11], [-2, 11, 12, 13, 14]),
        ])
 
    def testes(self, lista, resultado):
        assert semana5.bubble_sort(lista) == resultado

Para realizar o teste chamamos o programa que testa via pytest:

$ pytest-3 testa.py 
=== test session starts ===
platform linux -- Python 3.6.8, pytest-3.3.2, py-1.5.2, pluggy-0.6.0
rootdir: /tmp/curso_python/week5_testes_automatizados, inifile:
plugins: pylint-0.8.0
collected 3 items
 
testa.py ... [100%]
 
=== 3 passed in 0.03 seconds ===

Venv

Referência sobre ambientes virtuais e sobre gerenciamento de pacotes com venv no python.

  • Criando um virtualenv:
    $ python3 -m venv <path>
    # ou
    $ pyvenv <path>
  • Ativando o virtualenv:
    $ source <path>/bin/activate

Dentro de um virtualenv

  • Obtendo o que é usado num projeto:
    $ pip freeze
    • Pode se salvar a saída disso num arquivo para incluir no projeto como requirements.txt

pexpect/pxssh

O pexpect é o equivalente ao programa original “expect”, feito em tcl, muito usado em programação shell script. O pexpect é particularmente útil para programadores que lidam com infra-estrutura, pois fornece um meio de automatizar aplicativos que o shell diretamente não consegue, como ssh, telnet, etc, em outras palavras, programas que se apropriam do terminal e que não aceitam parâmetros pela stdin.

Django

Recomendações PEP

Referências externas

ti_publica/dicas_python.txt · Última modificação: 2020/01/10 15:57 por cartola