Não tenho um Pypi privado e agora?


A situação é a seguinte: a empresa que você trabalha é pequena e vocês querem publicar um pacote Python internamente. Mas sem pagar um serviço que faça isso ou adicionar uma nova ferramenta.

Embora essa pareça uma situação específica, podemos dizer que ela pode acontecer com bastante frequência. No Brasil, literalmente 99% das empresas são pequenos negócios. Segundo a Forbes, a estatística é exatamente a mesma nos EUA (o primeiro país que apareceu na busca :)).

Por isso hoje vou mostrar pra vocês as gambiarras estratégias que uso para resolver esse problema com o GitHub. Se você usa o GitLab, pode ver como fazer nesse post aqui.

Alternativas

Pré-requisitos

Para as duas opções você precisa ter um Personal Access Token do GitHub que dê acesso de leitura ao repositório desejado. Conseguiu o token? Agora configure-o como a variável de ambiente GH_API_TOKEN.

Instalando direto do requirements.txt

Você pode adicionar a seguinte linha ao seu requirements.txt:

seu-repo @ git+https://${GH_API_TOKEN}@github.com/org-ou-usuario/seu-repo@2.3.0

IMPORTANTE: essa opção é ótima mas expõe a variável de ambiente durante a instalação das dependendências, o que é uma falha de segurança. Esse é um bug conhecido que existe desde 2021.

Para resolver esse problema (enquanto a correção não vem) você pode adicionar -q ao comando de instalação para omitir toda a saída. O lado ruim é que você não vai ver o que está sendo instalado.

pip install -q -r requirements.txt

Fazendo download do wheel com a CLI do GitHub

Caso você prefira fazer isso fora do requirements.txt, você pode também: * instalar o gh, a CLI do GitHub * autenticar com a variável de ambiente * fazer o download da release * instalar usando pip install e o arquivo

RUN apt install gh
RUN echo $GH_API_TOKEN | gh auth login --with-token
RUN gh release download 1.0.0 --repo https://github.com/org-ou-usuario/seu-repo/ -p '*.whl' -D /tmp
RUN pip install "/tmp/seu-repo-1.0.0-py3-none-any.whl"

Por hoje é só, pessoal

O GitHub já está trabalhando em diferentes formas de publicar pacotes por lá - só não pro Python ainda, infelizmente. Enquanto esse dia não chega, deixo aí essas alternativas.

Divirtam-se! 🐍

Translations


comments powered by Disqus