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:19] 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/|Pylint]] 
-  * [[https://pytest.org/en/latest/|Pytest]] 
   * [[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://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 35: 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 =====
  
-===== 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 =====
 +
 +===== Referências externas =====
 +  * [[https://wiki.python.org.br/GuiaDeEstilo]]
ti_publica/dicas_python.1574554774.txt.gz · Última modificação: 2019/11/23 21:19 por cartola