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/11/23 21:58] – [Virtualenv] cartolati_publica:dicas_python [2019/12/06 11:54] – [Instalações] cartola
Linha 4: Linha 4:
 referência rápida (Cheat Sheet). referência rápida (Cheat Sheet).
  
-==== Pré-requisitos ====+==== Instalações ====
   * Python 3 ([[https://pythonclock.org/|python2 será aposentado em 2020]])   * Python 3 ([[https://pythonclock.org/|python2 será aposentado em 2020]])
-  * [[https://www.pylint.org/|pylint3]] 
-  * [[https://pytest.org/en/latest/|pytest3]] 
   * [[https://www.vim.org/|vim]]   * [[https://www.vim.org/|vim]]
   * [[https://github.com/vim-syntastic/syntastic|vim-syntastic]]   * [[https://github.com/vim-syntastic/syntastic|vim-syntastic]]
   * [[https://github.com/ycm-core/YouCompleteMe|vim-youcompleteme]]   * [[https://github.com/ycm-core/YouCompleteMe|vim-youcompleteme]]
-  * [[https://docs.python.org/3/library/venv.html|venv]] (virtualenv no python3) 
   * [[https://github.com/psf/black|black]]   * [[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 ==== ==== Configurando o ambiente ====
Linha 36: Linha 40:
 ===== Verificando código ===== ===== Verificando código =====
  
-**Ferramenta:** pylint +=== pylint ===  
-  * integrado ao vim+  * Integrado ao vim: verifica sempre que o arquivo é salvo
   * Sugere:   * Sugere:
-    * melhores comandos +    * Melhores comandos 
-    * melhores sintaxes +    * Melhores sintaxes 
-    * erros de sintaxe +    * Erros de sintaxe 
-    * documentação+    * Documentação
     * etc     * etc
-  * Verifica sempre que o arquivo é salvo+  * Analise se não é melhor instalar via pip dentro do venv, assim cada ambiente fica com o pylint correto direto (python2 / 3)
  
-**Ferramenta:** black +Uso: 
-  * só pra formatação +  Integrado ao vim 
-  * uso independente +  Via linha de comandos:<code shell>pylint3 exemplo.py</code> 
-  * não destrutivo+  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 =====
  
 +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:
 +<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>
 +
 +Exemplo de programa que testa o código:
 +<code python># -*- 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</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 ===== ===== Venv =====
  
Linha 65: Linha 128:
   * 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