Boas práticas modernas de Python, por Stuart Ellis
(stuartellis.name)Modern Good Practices for Python Development
Boas práticas modernas de Python, de Stuart Ellis, aborda pontos importantes a considerar no desenvolvimento com Python. Os principais tópicos são os seguintes:
Usando Python
- Evite usar o Python embutido no sistema operacional: o Python incluído no sistema pode estar desatualizado.
- Instale o Python com ferramentas que suportam várias versões: use ferramentas como pyenv ou mise.
- Use a versão mais recente do Python: utilize a versão estável mais nova para obter correções de segurança e melhorias de desempenho.
- Use
pipxpara executar aplicativos de desenvolvedor: execute aplicações em ambientes isolados com pipx. - Use ferramentas de projeto: recomendados PDM, Hatch, Mise e Rye.
Desenvolvendo projetos em Python
- Formatação de código: use Ruff.
- Linting de código: recomenda-se Ruff.
- Testes com pytest: use plugins relacionados, como pytest-randomly e pytest-cov.
- Empacotamento: use pacotes wheel e, quando necessário, imagens de contêiner ou PyInstaller.
Sintaxe da linguagem
- Use type hints: PEP 484, PEP 526.
- Formatação de strings com f-strings: PEP 498.
- Use objetos
datetimecom reconhecimento de fuso horário: PEP 615.
Projeto de aplicações
- Use logging em vez de
print(). - Use o formato TOML para configuração: PEP 680.
- Use I/O assíncrona apenas quando necessário.
Bibliotecas
- Trate entrada de linha de comando com argparse.
- Trate caminhos de arquivos e diretórios com pathlib.
- Use
os.scandir()rápido e eficiente em vez deos.listdir(): PEP 471. - Use
subprocessao executar comandos externos: PEP 324. - Para cliente web, use httpx em vez de requests.
Boas práticas de projeto
- Use o arquivo
pyproject.toml: PEP 517, PEP 518, PEP 621, PEP 660. - Use o layout
src: comparação entre layout src e layout flat. - Use ambientes virtuais no desenvolvimento: recomendados venv, PDM, Hatch, Mise.
- Use arquivos de requisitos para instalação de pacotes: utilize pip-compile via pip-tools ou uv.
Para mais detalhes, consulte o artigo completo.
.
.
Resumo da discussão no Hacker News sobre Python Modern Practices
Na discussão do Hacker News sobre Python Modern Practices, usuários compartilharam opiniões sobre várias ferramentas e metodologias:
- Recomendação de uso do UV: usar UV é rápido e fácil, e o suporte também funciona bem quando surgem problemas. by screye
- Menção ao Rye: o Rye oferece suporte a fixação e download do interpretador Python, e está prevista integração com o uv. by rat87
- Ênfase na simplicidade das ferramentas atuais: com ambientes Mamba e o pip padrão, não há problemas, e não se sente necessidade de trocar de ferramenta. by helsinki
- Preferência por ferramentas básicas: com pip, venv e virtualenvwrapper, é possível resolver a maioria dos problemas. by throwadobe
- Defesa do uso do Pipenv: o Pipenv tem sido usado como uma solução completa, e não está claro por que não é mais adotado. by routerl
- Problemas do Poetry: o Poetry decepcionou por problemas como não conseguir adicionar identificadores de versão de commit do Git. by alisonatwork
- Conda e Mamba: o Conda é muito mais poderoso em gerenciamento de dependências, e o Mamba é mais rápido. by wanderingmind
- Problemas de packaging: os problemas de empacotamento do Python têm forte componente social e sempre continuarão sendo um problema. by jampekka
- Sugestão de substituto para o Pyenv: o Mise é mais rápido que o Pyenv e também oferece suporte a projetos Node. by odie5533
- Modelos Pydantic e dataclasses: modelos Pydantic têm validação poderosa, mas são lentos, enquanto dataclasses são leves e eficientes. by martinky24
Para mais detalhes, consulte a discussão no Hacker News.
5 comentários
Não há conteúdo sobre redução de peso de bibliotecas. Usar o
virtualenvdo miniconda3 e remover bibliotecas não utilizadas para distribuir de forma portátil garantiu melhor desempenho em sistemas de processamento distribuído como o yarn.Por que deveríamos usar
pip-toolsouuv? Não vejo absolutamente nenhuma base para a afirmação de que isso seja moderno ou melhor.Parece haver um problema no comportamento atual do pip, em que não é possível especificar a versão de build, o que explica por que é preciso incluir hashes nos especificadores de dependência do pip. Sem esse contexto, um guia que apenas lista diretrizes não parece muito convincente.
O que vocês costumam usar principalmente??
Até agora eu vinha trabalhando apenas com
pip freeze, escolhendo só bibliotecas com suporte a Windows/Linux, e ainda não tive problemas causados por mudanças de versão de patch. Mesmo assim, agora que conheço o problema, entendo a necessidade; só pretendo considerar usarpip-toolsouuvquando estiverem um pouco mais maduros.