Ferramentas do usuário

Ferramentas do site


ti_publica:dicas_python

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
Última revisãoAmbos lados da revisão seguinte
ti_publica:dicas_python [2019/04/15 09:44] cartolati_publica:dicas_python [2019/12/06 11:54] – [Instalações] cartola
Linha 3: Linha 3:
 São apenas minhas anotações pessoais sobre Python que podem servir como um guia de São apenas minhas anotações pessoais sobre Python que podem servir como um guia de
 referência rápida (Cheat Sheet). referência rápida (Cheat Sheet).
 +
 +==== Instalações ====
 +  * Python 3 ([[https://pythonclock.org/|python2 será aposentado em 2020]])
 +  * [[https://www.vim.org/|vim]]
 +  * [[https://github.com/vim-syntastic/syntastic|vim-syntastic]]
 +  * [[https://github.com/ycm-core/YouCompleteMe|vim-youcompleteme]]
 +  * [[https://github.com/psf/black|black]]
 +  * [[https://docs.python.org/3/library/venv.html|venv]] (equivalente ao virtualenv)
 +    * Isso acaba já instalando o pip3
 +  * Dentro do venv:
 +    * [[https://pip.pypa.io/en/stable/installing/|pip via python]]\\ Gerenciador de pacotes. Dentro do venv instalará pacotes independentes por projeto ou versão de python.
 +    * [[https://www.pylint.org/|pylint3]]\\ apenas pra separar de outras versões
 +    * [[https://pytest.org/en/latest/|pytest3]]\\ apenas pra separar de outras versões
 +    * Pro YouCompleteMe funcionar no Vim dentro de um venv de Python3 tive que instalar:\\ <code>pip install future frozendict requests requests_futures</code>
 +
 +==== 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:
 +<code vim>autocmd BufNewFile *.py              :source ~/.vimrc-python
 +autocmd BufRead    *.py              :source ~/.vimrc-python</code>
 +  
 +Meu arquivo de configuração .vimrc-python
 +<code vim>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</code>
 +
 +===== 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:<code shell>pylint3 exemplo.py</code>
 +  * Para obter os códigos das mensagens:<code shell>pylint3 --msg-template='{msg_id}:{line:3d},{column}: {obj}: {msg}' exemplo.py</code>
 +  * Para inibir determinada mensagem:
 +    * No arquivo (a partir da linha):<code python># pylint: disable=C0103</code>
 +    * ou: <code python># pylint: disable=invalid-name</code>
 +    * Numa linha:<code python>var = 3 # pylint: disable=C0103</code>
 +    * Se precisar reabilitar (a partir da linha):<code python># pylint: enable=C0103</code>
 +    * Em todos os arquivos:
 +      * Edite o arquivo de configuração do pylint, item ''disable='' seção ''[MESSAGES CONTROL]''
 +      * Se o arquivo não existir:<code shell>pylint3 --generate-rcfile exemplo1.py > ~/.pylintrc</code>
 +
 +=== black ===
 +  * Só pra formatação
 +  * Uso independente
 +  * Não destrutivo
  
 ===== Testes com pytest ===== ===== Testes com pytest =====
  
-===== Virtualenv =====+A ideia é que você crie um programa que vá testar seu código. O pytest é uma ferramenta que vai facilitar isso.
  
-Referências+Exemplo de código
-  [[http://davedash.com/tutorial/virtualenv/|An introduction to Python virtualenvs]]+<code python>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</code>
  
-  criar um virtualenv:+Exemplo de programa que testa o código: 
 +<code python># -*- codingUTF-8 -*-
  
-  Ativar o virtualenv:<code>$ source <projeto>/bin/activate</code>+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</code> 
 + 
 +Para realizar o teste chamamos o programa que testa via pytest: 
 +<code shell>$ 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 === 
 +</code> 
 +===== Venv ===== 
 + 
 +Referência [[https://www.python.org/dev/peps/pep-0405/|sobre ambientes virtuais]] e [[https://packaging.python.org/tutorials/installing-packages/#creating-virtual-environments|sobre gerenciamento de pacotes com venv]] no python. 
 + 
 +  * Criando um virtualenv:<code>$ python3 -m venv <path> 
 +# ou 
 +$ pyvenv <path></code> 
 +  Ativando o virtualenv:<code>$ source <path>/bin/activate</code>
  
 ==== Dentro de um virtualenv ==== ==== Dentro de um virtualenv ====
   * Obtendo o que é usado num projeto:<code>$ pip freeze</code>   * Obtendo o que é usado num projeto:<code>$ pip freeze</code>
     * Pode se salvar a saída disso num arquivo para incluir no projeto como requirements.txt     * 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 "[[https://en.wikipedia.org/wiki/Expect|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.
 +
 +  * [[https://pexpect.readthedocs.io/en/stable/api/pexpect.html|pexpect]]: uso geral
 +  * [[https://pexpect.readthedocs.io/en/stable/api/pxssh.html|pxssh]]: uso para sessões de ssh
 +
  
 ===== Django ===== ===== Django =====
  
 +===== Recomendações PEP =====
ti_publica/dicas_python.txt · Última modificação: 2020/01/10 15:57 por cartola