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

Próxima revisão
Revisão anterior
ti_publica:dicas_python [2019/04/12 11:04]
cartola criada
ti_publica:dicas_python [2020/01/10 15:57] (atual)
cartola [Recomendações PEP]
Linha 4: Linha 4:
 referência rápida (Cheat Sheet). referência rápida (Cheat Sheet).
  
-===== Virtualenv =====+==== 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>
  
-Referências: +==== Configurando o ambiente ==== 
-  * [[http://davedash.com/tutorial/virtualenv/|An introduction to Python virtualenvs]]+Como programo sempre em ambiente Linux com o editor VIM as dicas aqui são focadas nisso.
  
-  criar um virtualenv:+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>
  
-  Ativar o virtualenv:<code>$ source <projeto>/bin/activate</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 ===== 
 + 
 +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 ===== 
 + 
 +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.1555077885.txt.gz · Última modificação: 2019/04/12 11:04 por cartola