Tabela de conteúdos
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
- Python 3 (python2 será aposentado em 2020)
- 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.