Publicando seu pacote em um repositório comunitário: PyPI ou Anaconda.org#
O pyOpenSci exige que seu pacote tenha uma distribuição que possa ser instalada a partir de um repositório comunitário público, como o PyPI, ou de um canal conda como bioconda ou conda-forge no Anaconda.org.
A seguir você encontrará mais informações sobre as diversas opções de publicação para o seu pacote Python.
Conclusões
Instalar pacotes no mesmo ambiente usando tanto pip quanto conda pode gerar conflitos entre pacotes.
Para minimizar conflitos para usuários que utilizam conda (ou pip) para gerenciar ambientes locais, considere publicar seu pacote tanto no PyPI quanto no canal conda-forge no Anaconda.org.
A seguir você aprenderá mais detalhes sobre as diferenças entre a publicação no PyPI e no conda do seu pacote Python.
Após publicar ambas as distribuições do pacote (a distribuição-fonte e o wheel) no PyPI, você pode publicar no conda-forge. O conda-forge requer uma distribuição-fonte no PyPI para compilar seu pacote no conda-forge. Você não precisa recompilar seu pacote para publicar no conda-forge.#
O que é o PyPI#
O PyPI é um repositório online de pacotes Python que você pode usar tanto para encontrar, instalar quanto para publicar seu pacote Python. Existe também um repositório PyPI de testes onde você pode testar a publicação do seu pacote antes da publicação definitiva no PyPI.
Muitos, se não a maioria dos pacotes Python, podem ser encontrados no PyPI e, portanto, instalados usando pip.
A principal diferença entre usar pip e conda para instalar um pacote é que o conda pode instalar qualquer pacote independentemente da(s) linguagem(ns) em que foi escrito. Já o pip só consegue instalar pacotes Python.
Clique aqui para acessar um tutorial sobre como publicar seu pacote no PyPI.
Dica
Na página de compilação de pacotes, discutimos os dois tipos de distribuição que você criará ao fazer um pacote Python: SDist (empacotado como .tar.gz ou .zip) e Wheel (.whl), que é basicamente um arquivo zip. Ambos esses «pacotes» de arquivos serão publicados no PyPI quando você usar uma ferramenta de build padrão para compilar seu pacote.
O que são conda e Anaconda.org?#
O conda é uma ferramenta de código aberto para gerenciamento de pacotes e ambientes. O conda pode ser usado para instalar ferramentas do repositório Anaconda.
O Anaconda.org contém repositórios públicos e privados de pacotes. Esses repositórios são conhecidos como canais (discutidos abaixo).
Um breve histórico da evolução do conda
O ecossistema conda surgiu há anos para oferecer suporte e simplificar o processo de gerenciamento de dependências de software em projetos Python científicos.
Muitos dos principais projetos Python científicos dependem de ou encapsulam ferramentas e extensões escritas em outras linguagens, como C++. Nos primeiros estágios do desenvolvimento do ecossistema científico, essas extensões e ferramentas não-Python não tinham boa cobertura no PyPI, dificultando a publicação. Nos últimos anos, há mais suporte para builds complexos que permitem aos desenvolvedores empacotar código não-Python em uma distribuição Python usando o formato de distribuição wheel.
O conda oferece um mecanismo para gerenciar essas dependências e garantir que os pacotes necessários sejam instalados corretamente.
Dica
Embora o conda tenha sido originalmente criado para suportar pacotes Python, atualmente é usado em diversas linguagens. Esse suporte multilinguagem facilita que alguns pacotes incluam e acessem ferramentas escritas em outras linguagens, como C/C++ (gdal), Julia ou R. Criar um ambiente que combine todos esses pacotes costuma ser mais fácil e consistente com gerenciadores de pacotes completos como o conda.
canais conda#
Os pacotes compilados com conda ficam armazenados em repositórios chamados canais. O gerenciador de pacotes conda pode instalar pacotes de diferentes canais.
Existem alguns canais públicos principais que a maioria das pessoas usa para instalar pacotes com conda, incluindo:
defaults: este é um canal gerenciado pela Anaconda. É a versão dos pacotes Python que você instalará caso instale a Anaconda Distribution. A Anaconda (a empresa) decide quais pacotes ficam disponíveis no canal
defaults.conda-forge: este é um canal mantido pela comunidade que tem foco em pacotes científicos. Esse canal é ideal para ferramentas que dão suporte a dados geoespaciais. Qualquer pessoa pode publicar um pacote nesse canal.
bioconda: este canal tem foco em ferramentas biomédicas.
O conda-forge surgiu porque muitos dos pacotes científicos não existiam no canal defaults da Anaconda.
Os canais conda representam diversos repositórios a partir dos quais você pode instalar pacotes. Como o conda-forge é mantido pela comunidade, qualquer pessoa pode enviar uma receita para lá. O PyPI também é um repositório mantido pela comunidade. Qualquer pessoa pode enviar um pacote para o PyPI e o test PyPI. Diferentemente do conda-forge, não há verificações manuais dos pacotes enviados ao PyPI.#
canais conda, PyPI, conda, pip - Onde publicar o seu pacote#
Você pode estar se perguntando por que existem diferentes repositórios de pacotes que podem ser usados para instalar pacotes Python.
E, mais importante, você provavelmente está se perguntando como escolher o repositório certo para publicar o seu pacote Python.
A resposta para ambas as perguntas está relacionada a conflitos de dependências.
Instalar o Python e pacotes Python a partir de diferentes repositórios pode levar a conflitos de ambiente, em que a versão de um pacote não funciona com a versão de outro pacote. Para manter os seus ambientes limpos e funcionando, o melhor é instalar pacotes a partir do mesmo repositório. Então use o pip para instalar tudo. Ou use o conda. Se puder, tente evitar instalar pacotes tanto pelo pip quanto pelo conda no mesmo ambiente.#
Gerenciando conflitos de dependências de pacotes Python#
Ambientes Python podem apresentar conflitos porque as ferramentas Python podem ser instaladas a partir de diferentes repositórios. De modo geral, ambientes Python têm uma chance menor de conflitos de dependências quando as ferramentas são instaladas a partir do mesmo repositório de pacotes. Assim, ambientes que contêm pacotes instalados tanto pelo pip quanto pelo conda têm maior probabilidade de gerar conflitos de dependências.
Da mesma forma, instalar pacotes do canal default da anaconda misturados com o canal conda-forge também pode levar a conflitos de dependências.
Muitos instalam pacotes diretamente do canal defaults do conda. No entanto, como esse canal é gerenciado pela Anaconda, os pacotes disponíveis nele são limitados àqueles que a Anaconda decide que devem fazer parte de uma instalação estável. O canal conda-forge foi criado para complementar o canal defaults. Ele permite que qualquer pessoa envie um pacote para ser publicado no canal. Assim, o canal conda-forge garante que um amplo conjunto de pacotes comunitários desenvolvidos por usuários possa ser instalado pelo conda.
Conclusões: Se puder, publique tanto no PyPI quanto no conda-forge para atender a mais usuários do seu pacote#
A conclusão aqui para os mantenedores é que, se você prevê que os usuários vão querer usar o conda para gerenciar seus ambientes locais (o que muitos fazem), você deveria considerar publicar tanto no PyPI quanto no canal conda-forge (mais sobre isso abaixo).
Como enviar para o conda-forge#
Embora o pyOpenSci não exija que você adicione o seu pacote ao conda-forge, nós incentivamos que você considere fazer isso!
Depois que o seu pacote estiver no PyPI, o processo para adicioná-lo ao conda-forge é simples de fazer. Você pode seguir os passos detalhados fornecidos pela equipe de mantenedores do conda-forge..
Clique aqui para ver um tutorial sobre como adicionar o seu pacote ao conda-forge.
Se você quer um tutorial passo a passo, clique aqui.
Depois que o seu pacote for adicionado, você terá um repositório feedstock no GitHub com o nome do seu pacote
Mantendo o repositório do seu pacote no conda-forge#
Depois que o seu pacote estiver no canal conda-forge, mantê-lo é simples. Toda vez que você envia uma nova versão do seu pacote para o PyPI, isso dispara uma build de integração contínua que atualiza o seu pacote no repositório do conda-forge. Quando essa build for concluída, você receberá uma notificação para revisar a atualização.
Você pode fazer o merge do pull request dessa atualização assim que estiver satisfeito com ele. Um PR pronto para merge geralmente significa garantir que as dependências do seu projeto (conhecidas como requisitos de execução) listadas no arquivo YAML atualizado encontrado no pull request correspondam aos metadados do PyPI da nova versão.