This document is for an old version of Python that is no longer supported. You should upgrade and read the documentação do Python para versão estável atual.

# Distribuindo Módulos Python

Email

  distutils-sig@python.org

Como um projeto popular de desenvolvimento de código aberto, Python tem uma comunidade de apoio ativa de colaboradores e usuários, que também fazem o seu software disponível para outros desenvolvedores de Python para usar sob os termos da licença de código aberto.

Isso permite aos usuários Python compartilhar e colaborar efetivamente, se beneficiando das soluções que outros já tenham criado para os problemas mais comuns (em alguns casos até mesmo os raros), bem como potencialmente contribuindo com suas próprias soluções para o conjunto de soluções comuns.

Este guia cobre a parte de distribuição do processo. Para um guia de instalação de outros projetos Python, consulte installation guide.

Nota

Para corporações e outros usuários institucionais, esteja ciente que muitas organizações têm suas próprias políticas em relação ao uso e contribuição para o software de código aberto. Por favor, leve em conta essas políticas ao usar as ferramentas de distribuição e instalação fornecidas com o Python.

## Termos chave

- Python Packaging Index é um repositório público de pacotes licenciados como código aberto e disponíveis para uso de outros usuários Python

- the Python Packaging Authority are the group of developers and documentation authors responsible for the maintenance and evolution of the standard packaging tools and the associated metadata and file format standards. They maintain a variety of tools, documentation and issue trackers on both GitHub and BitBucket.

- `distutils` é o primeiro sistema de construção e distribuição adicionado na biblioteca padrão do Python, em 1998. Embora o uso direto do `distutils` esteja sendo eliminado, ele estabelece as bases para a infraestrutura atual de empacotamento e distribuição, e não somente permanece como parte da biblioteca padrão, mas seu nome continua sendo usado de outras maneiras (como o nome da lista de e-mail usada para coordenar o desenvolvimento dos padrões de empacotamento Python).

- setuptools é um substituto (em grande parte) para `distutils`, publicado pela primeira vez em 2004. Sua adição mais notável sobre as ferramentas `distutils` originais foi a capacidade de declarar dependências em outros pacotes. Atualmente é recomendado como uma alternativa, mais regularmente atualizada, para `distutils`, que oferece suporte consistente para padrões de empacotamento mais recentes, em uma ampla gama de versões do Python.

- wheel (nesse contexto) é um projeto que adiciona o comando `bdist_wheel` ao `distutils`/setuptools. Isso produz um formato de pacote binário, portável entre várias plataformas (chamado “wheels” ou “wheel files” e definido no PEP 427), permitindo que bibliotecas Python, mesmo aquelas incluindo extensões binárias, sejam instaladas em um sistema, sem precisarem ser construídas localmente.

## Licenciamento de código aberto e colaboração

Na maior parte do mundo, o software é automaticamente coberto por direitos autorais. Isso significa que outros desenvolvedores precisam de permissão explícita para copiar, usar, modificar e redistribuir o software.

O licenciamento de código aberto é uma forma de conceder explicitamente tal permissão, de maneira relativamente consistente, permitindo aos desenvolvedores compartilhar e colaborar de forma eficiente, criando soluções comuns para vários problemas disponíveis gratuitamente. Isso permite que os desenvolvedores dediquem mais tempo focados nos problemas que são relativamente exclusivos para sua situação específica.

As ferramentas de distribuição fornecidas com o Python são projetadas para tornar razoavelmente simples, para os desenvolvedores, fazerem suas próprias contribuições, de volta para esse conjunto comum de software, se optarem por fazê-lo.

As mesmas ferramentas de distribuição também podem ser usadas para distribuir software dentro de uma organização, independentemente de esse software ser publicado como software de código aberto ou não.

## Instalando as ferramentas

A biblioteca padrão não inclui ferramentas de construção que suportem padrões de empacotamento modernos do Python, pois a equipe de desenvolvimento principal achou que é importante ter ferramentas padrão que funcionem consistentemente, mesmo em versões mais antigas do Python.

As ferramentas de construção e distribuição, recomendadas atualmente, podem ser instaladas chamando o módulo `pip` na linha de comando:

    python -m pip install setuptools wheel twine

Nota

Para usuários POSIX (incluindo usuários Mac OS X e Linux), essas instruções assumem o uso de um virtual environment.

Para usuários Windows, essas instruções assumem que a opção de ajustar a variável de ambiente do sistema, PATH, foi selecionado durante a instalação do Python.

O “Python Packaging User Guide” inclui mais detalhes sobre currently recommended tools.

## Reading the guide

The Python Packaging User Guide covers the various key steps and elements involved in creating a project:

- Estrutura do projeto

- Compilando e empacotando o projeto

- Enviando o projeto para o Python Packaging Index

## Como eu…?

Essas são respostas rápidas ou links para algumas tarefas comuns.

### … escolho um nome para meu projeto?

Não é um tema fácil, mas aqui estão algumas dicas:

- verifique o “Python Packaging Index” para ver se o nome já está em uso

- check popular hosting sites like GitHub, BitBucket, etc to see if there is already a project with that name

- verifique o que surge, em uma pesquisa na Web, para o nome que você está considerando

- evite palavras particularmente comuns, especialmente aquelas com vários significados, pois elas podem dificultar que os usuários encontrem o seu software ao procurá-lo

### … crio e distribuo extensões binárias?

Este é realmente um tema bastante complexo, com uma variedade de alternativas disponíveis, dependendo exatamente do que você pretende alcançar. Veja “Python Packaging User Guide” para mais informação e recomendações.

Ver também

Python Packaging User Guide: Binary Extensions