Resumos de projetos

Resumos e links para os projetos mais relevantes no espaço de instalação e empacotamento do Python.

Projetos do PyPA

bandersnatch

Issues | GitHub | PyPI

bandersnatch é um cliente de espelhamento do PyPI projetado para criar de forma eficiente um espelho completo do conteúdo do PyPI. Assim, as organizações economizam largura de banda e latência nos downloads de pacotes (especialmente no contexto de testes automatizados) e evitam o carregamento excessivo da Content Delivery Network (CDN) do PyPI.

construir

Documentação | Issues | GitHub | PyPI

build é um construtor de pacotes Python compatível com a PEP 517. Ele fornece uma CLI para construir pacotes, bem como uma API Python.

cibuildwheel

Documentação | Issues | GitHub | PyPI | Discussões | Discord #cibuildwheel

cibuildwheel é um pacote Python que constrói wheels para todas as plataformas comuns e versões Python na maioria dos sistemas CI. Veja também multibuild.

distlib

Documentação | Issues | Bitbucket | PyPI

distlib é uma biblioteca que implementa funções de baixo nível relacionadas ao empacotamento e distribuição de software Python. distlib implementa várias PEPs relevantes (padrões de proposta de aprimoramento do Python) e é útil para desenvolvedores de ferramentas de empacotamento de terceiros para fazer e enviar distribuições binária e fonte, alcançar interoperabilidade, resolver dependências, gerenciar recursos de pacote e executar outras funções semelhantes.

Ao contrário do projeto empacotamento mais estrito (abaixo), que implementa especificamente padrões modernos de interoperabilidade de pacotes Python, distlib também tenta fornecer comportamentos de fallback razoáveis quando solicitados a lidar com pacotes legados e metadados anteriores à interoperabilidade moderna padrões e se enquadram no subconjunto de pacotes que são incompatíveis com esses padrões.

flit

Documentação | Issues | PyPI

O Flit fornece uma maneira simples de criar e enviar pacotes e módulos puro Python para o PyPI. Ele se concentra em facilitar as coisas fáceis para empacotar. O Flit pode gerar um arquivo de configuração para configurar rapidamente um projeto simples, construir distribuições fonte e wheels e enviá-los para PyPI.

Flit usa pyproject.toml para configurar um projeto. O Flit não depende de ferramentas como setuptools para construir distribuições, ou twine para enviá-las ao PyPI. O Flit requer Python 3, mas você pode usá-lo para distribuir módulos para Python 2, desde que eles possam ser importados no Python 3.

hatch

GitHub and Docs | PyPI

Hatch is a unified command-line tool meant to conveniently manage dependencies and environment isolation for Python developers. Python package developers use Hatch and its build backend Hatchling to configure, version, specify dependencies for, and publish packages to PyPI. Its plugin system allows for easily extending functionality.

empacotamento

Documentação | Issues | GitHub | PyPI

Utilitários básicos para o empacotamento do Python usado por pip e setuptools.

Os utilitários principais na biblioteca de empacotamento lidam com manipulação de versão, especificadores, marcadores, requisitos, tags e atributos e tarefas semelhantes para pacotes Python. A maioria dos usuários Python confia nesta biblioteca sem precisar chamá-la explicitamente; os desenvolvedores de outras ferramentas de empacotamento, distribuição e instalação Python listadas aqui geralmente usam sua funcionalidade para analisar, descobrir e, de outra forma, lidar com atributos de dependência.

Este projeto foca especificamente na implementação dos padrões modernos de interoperabilidade de pacotes Python definidos em Especificações do PyPA, e irá relatar erros para pacotes legados suficientemente antigos que são incompatíveis com esses padrões. Em contraste, o projeto distlib é uma biblioteca mais permissiva que tenta fornecer uma leitura plausível de metadados ambíguos em casos onde empacotamento irá relatar um erro.

pip

Documentação | Issues | GitHub | PyPI

A ferramenta mais popular para instalação de pacotes Python e incluída nas versões modernas do Python.

Ele fornece os recursos básicos essenciais para localizar, baixar e instalar pacotes do PyPI e outros índices de pacotes do Python e pode ser incorporado em uma ampla gama de fluxos de trabalho de desenvolvimento por meio de sua interface de linha de comando (CLI).

Pipenv

Documentação | Código-fonte | Issues | PyPI

Pipenv é um projeto que visa trazer o melhor de todos os mundos de empacotamento para o mundo Python. Ele agrega Pipfile, pip e virtualenv em um único conjunto de ferramentas. Possui cores de terminal muito bonitas.

O Pipenv visa ajudar os usuários a gerenciar ambientes, dependências e pacotes importados na linha de comando. Ele também funciona bem no Windows (que outras ferramentas muitas vezes não atendem), cria e verifica hashes de arquivo, para garantir a conformidade com especificadores de dependência bloqueados por hash e facilita a desinstalação de pacotes e dependências. Ele é usado por usuários Python e administradores de sistema, mas tem menos manutenção desde o final de 2018.

Pipfile

Código-fonte

Pipfile e sua irmã Pipfile.lock são uma alternativa centrada na aplicação de nível superior ao arquivo de baixo nível requirements.txt do pip.

pipx

Documentação | GitHub | PyPI

pipx é uma ferramenta para instalar e executar aplicações de linha de comando Python sem causar conflitos de dependência com outros pacotes instalados no sistema.

Guia de Usuário para Empacotamento de Python

Documentação | Issues | GitHub

Este guia!

readme_renderer

GitHub e documentação | PyPI

readme_renderer é uma biblioteca que os desenvolvedores de pacote usam para renderizar seus arquivos de documentação de usuário (README) no HTML a partir de linguagens de marcação como Markdown ou reStructuredText. Os desenvolvedores o chamam por conta própria ou via twine, como parte de seu processo de gerenciamento de lançamento, para verificar se as descrições de seus pacotes serão exibidas corretamente no PyPI.

setuptools

Documentação | Issues | GitHub | PyPI

setuptools (que inclui easy_install) é uma coleção de melhorias para os distutils Python que permitem a você construir e distribuir mais facilmente distribuições Python, especialmente aquelas que possuem dependências de outros pacotes.

distribute era um fork do setuptools que foi mesclado no setuptools (na v0.7), tornando assim setuptools a escolha primária para o empacotamento Python.

trove-classifiers

Issues | GitHub | PyPI

trove-classifiers é a fonte canônica para classificadores no PyPI, que os mantenedores de projetos usam para descrever sistematicamente seus projetos para que os usuários possam encontrar melhor os projetos que correspondem às suas necessidades no PyPI.

O pacote trove-classifiers contém uma lista de classificadores válidos e classificadores descontinuados (que são pareados com os classificadores que os substituem). Use este pacote para validar classificadores usados em pacotes destinados ao envio para o PyPI. Como esta lista de classificadores é publicada como código, você pode instalá-la e importá-la, proporcionando um fluxo de trabalho mais conveniente em comparação com a referência à lista publicada em PyPI. O rastreador de problemas para o projeto hospeda discussões sobre classificadores propostos e solicitações de novos classificadores.

twine

Documentação | Issues | GitHub | PyPI

Twine é a principal ferramenta que os desenvolvedores usam para enviar pacotes para o índice de pacotes Python ou outros Python Package Index. É um programa de linha de comando que passa arquivos de programa e metadados para uma API web. Os desenvolvedores o usam porque é a ferramenta oficial de envio do PyPI, é rápida e segura, é mantida e funciona de forma confiável.

virtualenv

Documentação | Issues | GitHub | PyPI

virtualenv é uma ferramenta que usa a variável de ambiente de caminho de linha de comando para criar Ambientes Virtuais do Python, assim como venv faz. virtualenv fornece funcionalidade adicional, em comparação com venv, oferecendo suporte ao Python 2.7 e fornecendo recursos convenientes para configurar, manter, duplicar e solucionar problemas de ambientes virtuais. Para obter mais informações, consulte a seção sobre Criando ambientes virtuais.

Warehouse

Documentação | Issues | GitHub

A base de código atual que alimenta o Python Package Index (PyPI). Está hospedado em pypi.org. A fonte padrão para downloads do pip.

wheel

Documentação | Issues | GitHub | PyPI

Primeiramente, o projeto wheel oferece a extensão bdist_wheel do setuptools para criar distribuições wheel. Além disso, oferece seu próprio utilitário de linha de comando para criar e instalar wheels.

Veja também auditwheel, uma ferramenta que os desenvolvedores de pacotes usam para verificar e corrigir pacotes Python que eles estão fazendo no formato de roda binária. Ele fornece funcionalidade para descobrir dependências, verificar a conformidade dos metadados e corrigir wheel e os metadados para vincular e incluir bibliotecas externas compartilhadas em um pacote.

Projetos não-PyPA

buildout

Documentação | Issues | PyPI | GitHub

Buildout é um sistema de construção baseado em Python para criar, montar e distribuir aplicações de várias partes, algumas das quais podem ser não baseadas em Python. Ele permite que você crie uma configuração de buildout e reproduza o mesmo software posteriormente.

conda

Documentação

conda é a ferramenta de gerenciamento de pacotes para as instalações do Anaconda Python . Anaconda Python é uma distribuição do Anaconda, Inc voltada especificamente para a comunidade científica, e em particular no Windows onde a instalação de extensões binárias é frequentemente difícil .

Conda é uma ferramenta completamente separada de pip, virtualenv e wheel, mas fornece muitos de seus recursos combinados em termos de gerenciamento de pacotes, gerenciamento de ambiente virtual e implantação de extensões binárias.

O Conda não instala pacotes do PyPI e pode instalar apenas a partir dos repositórios oficiais do Anaconda, ou anaconda.org (um local para pacotes conda contribuídos pelo usuário), ou um servidor de pacotes local (por exemplo, intranet). No entanto, observe que pip pode ser instalado e trabalhar lado a lado com o conda para gerenciar distribuições do PyPI. Além disso, conda skeleton é uma ferramenta para fazer pacotes Python instaláveis pelo conda primeiro obtendo-os em PyPI e modificando seus metadados.

devpi

Documentação | Issues | PyPI

devpi apresenta um poderoso servidor compatível com PyPI e cache de proxy PyPI com uma ferramenta de linha de comando complementar para conduzir atividades de empacotamento, teste e lançamento com Python. devpi também fornece uma interface web navegável e pesquisável.

enscons

Código-fonte | Issues | PyPI

Enscons é uma ferramenta de empacotamento Python baseada em SCons. Ele cria distribuições de código-fonte compatíveis com pip e wheels sem usar distutils ou setuptools, incluindo distribuições com extensões C. Enscons tem uma arquitetura e filosofia diferente de distutils. Em vez de adicionar recursos de compilação a um sistema de empacotamento Python, enscons adiciona empacotamento Python a um sistema de construção de propósito geral. Enscons ajuda você a construir sdists que podem ser construídos automaticamente por pip, e wheels que são independentes de enscons.

Hashdist

Documentação | GitHub

Hashdist é uma biblioteca para construir distribuições de software que não dependem do root. Hashdist está tentando ser “o preferido do Debian para os casos em que a tecnologia Debian não funciona”. A melhor maneira para Pythonistas pensarem sobre Hashdist pode ser um híbrido mais poderoso de virtualenv e buildout. Ele tem como objetivo resolver o problema de instalação de software científico e tornar a distribuição de pacotes sem estado, com cache e com capacidade de distribuição. É usado por alguns pesquisadores, mas não tem manutenção desde 2016.

multibuild

GitHub

Multibuild é um conjunto de scripts de CI para construir e testar Python wheels para Linux, macOS e (menos flexível) Windows. Veja também cibuildwheel.

pdm

Documentação | GitHub | PyPI

PDM é um gerenciador de pacotes Python moderno com suporte PEP 582. Ele instala e gerencia pacotes de maneira semelhante ao npm que não precisa criar um ambiente virtual de forma alguma. Ele também usa pyproject.toml para armazenar metadados do projeto conforme definido em PEP 621.

pex

Documentação | GitHub | PyPI

pex é uma biblioteca e ferramenta para gerar arquivos .pex (Python EXecutable), ambientes autônomos Python no espírito de virtualenv. Os arquivos .pex são apenas arquivos zip cuidadosamente construídos com um #!/usr/bin/env python e um __main__.py especial, e são projetados para fazer a implantação de aplicações Python tão simples quanto cp.

pip-tools

GitHub e documentação | PyPI

pip-tools é um conjunto de ferramentas destinadas aos administradores de sistema Python e gerentes de lançamento que desejam manter suas compilações determinísticas e, ao mesmo tempo, manter-se atualizado com as novas versões de suas dependências. Os usuários podem especificar a liberação particular de suas dependências por meio de hash, fazer convenientemente uma lista devidamente formatada de requisitos de informações em outras partes de seu programa, atualizar todas as dependências (um recurso pip atualmente não fornece) e criar camadas de restrições para o programa obedecer.

piwheels

Site | Documentação | GitHub

piwheels é um site, e o software que o sustenta, que busca pacotes de distribuição de código-fonte do PyPI e os compila em wheels binários que são otimizadas para instalação em computadores Raspberry Pi. O Raspberry Pi OS pré-configura pip para usar piwheels.org como um índice adicional para PyPI.

poetry

Documentação | GitHub | PyPI

poetry é uma ferramenta de linha de comando para lidar com a instalação de dependências e isolamento, bem como construção e empacotamento de pacotes Python. Ele usa pyproject.toml e, ao invés de depender da funcionalidade do resolvedor no pip, fornece seu próprio resolvedor de dependências. Ele tenta acelerar a experiência dos usuários de instalação e resolução de dependências, armazenando localmente em cache os metadados sobre as dependências.

pypiserver

Documentação | GitHub | PyPI

pypiserver é uma aplicação minimalista que serve como um índice de pacotes privado Python dentro das organizações, implementando uma API simples e uma interface de navegador. Você pode enviar pacotes privados usando ferramentas de envio padrão, e os usuários podem baixar e instalá-los com pip, sem publicá-los publicamente. As organizações que usam o pypiserver geralmente baixam pacotes tanto do pypiserver quanto do PyPI.

PyScaffold

Documentação | GitHub | PyPI

PyScaffold é um gerador de projeto para inicialização de pacotes Python, pronto para ser compartilhado no PyPI e instalável via pip. Ele se baseia em um conjunto de configurações padrão sãs para ferramentas estabelecidas (como o setuptools, pytest e Sphinx) para fornecer um ambiente produtivo para que os desenvolvedores possam começar a codificar imediatamente. PyScaffold também pode ser usado com projetos existentes para tornar o empacotamento mais fácil.

scikit-build

Documentação | GitHub | PyPI

Scikit-build é um gerador de sistema de construção aprimorado para extensões C/C++/Fortran/Cython do CPython que se integra com setuptools, wheel e pip. Ele usa internamente cmake (disponível em PyPI) para fornecer melhor suporte para compiladores adicionais, sistemas de construção, compilação cruzada e localização de dependências e seus requisitos de construção associados. Para acelerar e paralelizar a construção de grandes projetos, o usuário pode instalar o ninja (também disponível no PyPI).

shiv

Documentação | GitHub | PyPI

shiv é um utilitário de linha de comando para construir zipapps Python totalmente autocontidos conforme descrito na PEP 441, mas com todas as suas dependências incluídas. Seu objetivo principal é tornar a distribuição Python de aplicações e ferramentas de linha de comando rápida e fácil.

Spack

Documentação | GitHub | Artigo | Slides

Um gerenciador de pacotes flexível projetado para oferecer suporte a várias versões, configurações, plataformas e compiladores. O Spack é como o Homebrew, mas os pacotes são escritos em Python e parametrizados para permitir fácil troca de compiladores, versões de bibliotecas, opções de construção, etc. Arbitrariamente, muitas versões de pacotes podem coexistir no mesmo sistema. O Spack foi projetado para construir rapidamente aplicações científicas de alto desempenho em clusters e supercomputadores.

O Spack não está no PyPI (ainda), mas não requer instalação e pode ser usado imediatamente após a clonagem do GitHub.

zest.releaser

Documentação | GitHub | PyPI

zest.releaser é uma ferramenta de lançamento de pacote Python que fornece uma camada de abstração sobre twine. Os desenvolvedores Python usam zest.releaser para automatizar o incremento de números de versão de pacote, atualizando changelogs, marcando lançamentos no controle de fontes e enviando novos pacotes para PyPI.

Projetos de biblioteca padrão

ensurepip

Documentação | Issues

Um pacote na Biblioteca Padrão do Python que fornece suporte para preparar o pip em uma instalação existente do Python ou em ambiente virtual. Na maioria dos casos, os usuários finais não usarão este módulo, mas em vez disso, ele será usado durante a construção da distribuição Python.

distutils

Documentação | Issues

O sistema de empacotamento original do Python, adicionado à biblioteca padrão no Python 2.0.

Devido aos desafios de manter um sistema de empacotamento onde as atualizações de recursos estão fortemente acopladas às atualizações de tempo de execução da linguagem, o uso direto de distutils agora é ativamente desencorajado, com setuptools sendo o substituto preferido. setuptools não apenas fornece recursos que o distutils simples não oferece (como declarações de dependência e declarações de ponto de entrada), ele também fornece uma interface de construção consistente e conjunto de recursos em todas as versões Python suportadas .

venv

Documentação | Issues

Um pacote na Biblioteca Padrão do Python (começando com Python 3.3) para criar Ambientes Virtuais. Para obter mais informações, consulte a seção Criando ambientes virtuais.