Torne todos os seus pacotes privados acessíveis em um só lugar
Com este índice Pypi hospedado no Github
Descrição • Experimente! • Iniciar • Modificar pacotes indexados • Perguntas frequentes • Uma palavra sobre ataques da cadeia de suprimentos • Contribuir • Referências
Este repositório é uma página do GitHub usada como um índice PYPI, em conformidade com o PEP503.
Você pode usá -lo para agrupar todos os seus pacotes em um só lugar e acessá -lo facilmente através pip , quase como qualquer outro pacote disponível publicamente!
Embora o índice Pypi seja público, os pacotes privados indexados aqui são mantidos privados: você precisará da autenticação do GitHub para poder recuperá -lo.
Visite astariul.github.io/github-hosted-pypi/ e tente instalar pacotes indexados lá!
Tente instalar o pacote public-hello :
pip install public-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/ Ele também instalará o pacote mydependency , automaticamente!
Experimente com:
from public_hello import hi
print ( hi ())Você também pode instalar uma versão específica:
pip install public-hello==0.1 --extra-index-url https://astariul.github.io/github-hosted-pypi/ Agora tente instalar o pacote private-hello :
pip install private-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/Não vai funcionar, porque é privado e só eu posso acessá -lo!
Settings do seu repositório e ative a página do GitHubindex.html e pkg_template.html para o seu gosto<user>.github.io/<repo_name> para ver seu índice Pypi Agora que seu índice Pypi está configurado, você pode registrar / atualizar / excluir pacotes indexados.
As ações do GitHub estão configuradas para fazê -lo automaticamente para você.
Você só tem que:
Actions do seu repositórioregister / update / delete ) e acioná -lo manualmente Como você deve saber, pip pode instalar o pacote hospedado no GitHub se for fornecida no formulário pip install git+<repo_link> . Esse índice Pypi é apenas um índice de links para outro repositório do GitHub.
As páginas do GitHub são públicas, então esse índice Pypi é público. Mas ele apenas contém links para outros repositórios do GitHub, nenhum código está hospedado neste índice Pypi!
Se o código de hospedagem do repositório for privado, você precisará se autenticar com o GitHub para poder cloná -lo, tornando -o privado efetivamente.
Se você se perguntar mais especificamente sobre ataques da cadeia de suprimentos, verifique a seção!
Ao executar pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/ , o seguinte aconteceu:
pip analisará https://pypi.org/ , o Índice público padrão, tentando encontrar um pacote com o nome especificado.https://astariul.github.io/github-hosted-pypi/ .pip ( git+<repo_link>@<tag> ).pip entende que é um repositório do GitHub e clonará o repositório (na etiqueta específica) localmente.pip instale o pacote.pip Instale qualquer dependência ausente com as mesmas etapas.A autenticação acontece na etapa 4, ao clonar o repositório.
A única prática recomendada é usar lançamentos do GitHub. Isso permite que seu pacote tenha uma versão referida por uma tag específica.
Para fazer isso:
pip install git+<repo_link>@<tag>git+<repo_link>@<tag> ). Você pode apenas especificar um nome diferente para o seu pacote indexado. Basta dar um nome diferente no formulário ao registrá -lo.
Por exemplo, se você tiver um pacote privado chamado tensorflow , ao registrá-lo neste índice, poderá nomeá-lo my_cool_tensorflow , para que não haja colisão de nome com o pacote público tensorflow .
Em seguida, você pode instalá-lo com pip install my_cool_tensorflow --extra-index-url https://astariul.github.io/github-hosted-pypi/ .
Então, do python , você pode simplesmente fazer:
import tensorflowMas tenha cuidado com isso! Embora seja possível lidar com isso assim, é sempre melhor ter um nome único para o seu pacote, para evitar confusão, mas também para segurança!
A criação de uma imagem do Docker não é interativa, portanto, não há prompt para digitar o nome de usuário e a senha.
Em vez disso, você deve colocar suas credenciais do GitHub em um arquivo .netrc , para que pip possa se autenticar ao clonar do GitHub.
Para fazer isso com segurança no Docker, você deve usar segredos do Docker. Aqui está um tutorial rápido sobre como fazer:
Etapa 1 : salve suas credenciais em um arquivo secreto. Siga este exemplo:
machine github.com
login <gh_user>
password <gh_pass>
n .
Tão cuidadoso se você estiver usando um IDE que substitua as guias por espaços ou se você estiver no Windows (onde as terminações da linha são rn )!
Vamos nomear este arquivo gh_auth.txt .
Etapa 2 : Crie seu arquivo Docker. No arquivo do docker, você deve montar o arquivo secreto no .netrc e executar o comando onde precisar de autenticação. Por exemplo :
# syntax=docker/dockerfile:experimental
FROM python:3
RUN --mount=type=secret,id=gh_auth,dst=/root/.netrc pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/Etapa 3 : construa sua imagem do Docker, especificando a localização do segredo criado na Etapa 1:
sudo DOCKER_BUILDKIT=1 docker build --secret id=gh_auth,src=./gh_auth.txt .
Se você tiver alguma dúvida ou idéia para melhorar esta FAQ, abra um problema PR / Blank!
Como você viu anteriormente, esse índice Pypi hospedado no Github depende do recurso pip --extra-index-url . Por causa de como esse recurso funciona, é vulnerável a ataques da cadeia de suprimentos.
Por exemplo, digamos que você tenha um pacote chamado fbi_package versão 2.8.3 hospedado no seu índice privado de Pypi.
Um invasor pode criar um pacote malicioso com o mesmo nome e uma versão superior (por exemplo, 99.0.0 ).
Quando você executa pip install fbi_package --extra-index-url my_pypi_index.com , sob o Hood pip baixará a versão mais recente do pacote, que é o pacote malicioso!
Embora esse repositório torne muito conveniente ter seu próprio índice Pypi, esteja ciente de que a página é pública; portanto, qualquer pessoa pode ver qual nome de pacote você está usando e criar um pacote malicioso com esse mesmo nome ...
É por isso que incluímos verificações automatizadas neste índice privado de Pypi. Sempre que você acessa a página do seu pacote, a API Pypi é chamada e, se um pacote com o mesmo nome e uma versão superior for encontrada, o comando de instalação será substituído por um aviso.
Você pode ver uma demonstração desse aviso em https://astariul.github.io/github-hosted-pypi/transformers/.
Se você vir este aviso, não instale o pacote! Em vez disso, altere o nome do seu pacote ou atualize a versão acima de sua contraparte pública.
Tenha cuidado lá fora!
Questões e relações públicas são bem -vindas!
Se você se deparar com qualquer coisa estranha / que pode ser melhorada, entre em contato!
Isso é muito inspirado neste repositório.
É apenas uma versão glorificada, com páginas mais limpas e ações do GitHub para adicionar facilmente, atualizar e remover pacotes do seu índice.
Verifique também o post do blog do autor original!
O ícone usado na página foi feito por Freepik de Flaticon