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
ti_publica:dicas_python [2019/11/23 21:58] – [Virtualenv] cartolati_publica:dicas_python [2020/01/10 15:57] (atual) – [Recomendações PEP] 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 =====
 +
 +===== Referências externas =====
 +  * [[https://wiki.python.org.br/GuiaDeEstilo]]
ti_publica/dicas_python.1574557082.txt.gz · Última modificação: 2019/11/23 21:58 por cartola