Сделайте все ваши частные пакеты доступными в одном месте
С этим индексом PYPI, проведенным на GitHub
Описание • Попробуйте! • Начало работы • Изменить индексированные пакеты • FAQ • Слово о атаках цепочки поставок • Внесение вклад • Ссылки
Этот репозиторий представляет собой страницу GitHub, используемая в качестве индекса PYPI, соответствующей PEP503.
Вы можете использовать его, чтобы сгруппировать все свои пакеты в одном месте, и легко получить к нему доступ через pip , почти как любой другой пакет, общедоступный!
В то время как индекс PYPI является государственным, индексированные здесь частные пакеты хранятся в частном порядке: вам понадобится аутентификация GitHub, чтобы иметь возможность его извлечь.
Посетите astariul.github.io/github-hosted-pypi/ и попробуйте установить там индексированные пакеты!
Попробуйте установить пакет public-hello :
pip install public-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/ Он также автоматически установит пакет mydependency !
Попробуйте это с:
from public_hello import hi
print ( hi ())Вы также можете установить определенную версию:
pip install public-hello==0.1 --extra-index-url https://astariul.github.io/github-hosted-pypi/ Теперь попробуйте установить пакет private-hello :
pip install private-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/Это не сработает, потому что это личное, и только я могу получить к нему доступ!
Settings вашего репозитория и включите страницу GitHubindex.html и pkg_template.html по своему вкусу<user>.github.io/<repo_name> чтобы увидеть ваш индекс pypi Теперь, когда ваш индекс PYPI настроен, вы можете зарегистрировать / обновить / удалить пакеты.
Действия GitHub настроены для автоматического для вас.
Вы просто должны:
Actions своего репозиторияregister / update / delete ) и запустить его вручную Как вы, возможно, знаете, pip может установить пакет с GitHub, приведенный в форме pip install git+<repo_link> . Этот индекс PYPI является лишь индексом ссылок на другой репозиторий GitHub.
Страницы GitHub публичные, поэтому этот индекс PYPI является общедоступным. Но он просто содержит ссылки на другие репозитории GitHub, в этом индексе PYPI не размещен код!
Если код хостинга репозитория является частным, вам нужно будет аутентифицировать с GitHub, чтобы иметь возможность клонировать его, эффективно сделав его частным.
Если вы более конкретно задаетесь вопросом о атаках цепочки поставок, проверьте раздел об этом!
При запуске pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/ , происходит следующее:
pip рассмотрит https://pypi.org/ , по умолчанию, публичный индекс, пытаясь найти пакет с указанным именем.https://astariul.github.io/github-hosted-pypi/ .pip ( git+<repo_link>@<tag> ).pip понимает, что это репозиторий GitHub, и он будет клонировать репозиторий (по конкретному тегу) локально.pip установите пакет.pip установите любую недостающую зависимость с теми же шагами.Аутентификация происходит на шаге 4, при клонировании репозитория.
Единственной лучшей практикой является использование выпусков GitHub. Это позволяет вашему пакету иметь версию, указанную определенной тегом.
Чтобы сделать это:
pip install git+<repo_link>@<tag>git+<repo_link>@<tag> ). Вы можете просто указать другое имя для вашего индексированного пакета. Просто дайте ему другое имя в форме при регистрации.
Например, если у вас есть частный пакет с именем tensorflow , когда вы регистрируете его в этом индексе, вы можете назвать его my_cool_tensorflow , так что с общедоступным пакетом tensorflow нет имен-соревнования.
Затем вы можете установить его с помощью pip install my_cool_tensorflow --extra-index-url https://astariul.github.io/github-hosted-pypi/ .
Тогда из python вы можете просто сделать:
import tensorflowНо будьте осторожны с этим! Хотя это возможно справиться с этим таким образом, всегда лучше иметь уникальное имя для вашего пакета, чтобы избежать путаницы, но также и для безопасности!
Создание изображения Docker не является интерактивным, поэтому не существует запроса ввести имя пользователя и пароль.
Вместо этого вы должны поместить свои учетные данные GitHub в файл .netrc , чтобы pip мог аутентифицировать подлинность при клонировании из GitHub.
Чтобы надежно сделать это на Docker, вы должны использовать секреты Docker. Вот быстрое руководство о том, как сделать:
Шаг 1 : Сохраните свои учетные данные в секретном файле. Следуйте этому примеру:
machine github.com
login <gh_user>
password <gh_pass>
n .
Так осторожно, если вы используете IDE, который заменяет вкладки на пространствах или если вы находитесь в Windows (где концы с линией rn )!
Давайте назовите этот файл gh_auth.txt .
Шаг 2 : Создайте файл Docker. В файле Docker вы должны установить секретный файл в .netrc и запустить команду, в которой вам нужна аутентификация. Например :
# 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/Шаг 3 : Создайте изображение Docker, указав местоположение секрета, созданного на шаге 1:
sudo DOCKER_BUILDKIT=1 docker build --secret id=gh_auth,src=./gh_auth.txt .
Если у вас есть какие -либо вопросы или идеи для улучшения этого часто задаваемых вопросов, откройте проблему PR / Blank!
Как вы видели ранее, этот индекс PYPI с GitHub полагается на функцию pip --extra-index-url . Из -за того, как работает эта функция, она уязвима для атак цепочки поставок.
Например, допустим, у вас есть пакет с именем fbi_package Версия 2.8.3 , размещенный в вашем частном индексе PYPI.
Злоумышленник может создать вредоносный пакет с тем же именем и более высокой версией (например, 99.0.0 ).
Когда вы запускаете pip install fbi_package --extra-index-url my_pypi_index.com , под Hood pip загрузит последнюю версию пакета, которая является вредоносной пакетом!
Хотя этот репозиторий очень удобно иметь свой собственный индекс PYPI, имейте в виду, что страница общедоступна, поэтому каждый может увидеть, какое имя вы используете, и создать вредоносную пакет с таким же именем ...
Вот почему мы включили автоматические проверки в этот частный индекс PYPI. Всякий раз, когда вы получаете доступ к странице вашего пакета, вызывается PYPI API, и если пакет с тем же именем и более высокой версией найдена, команда установки заменяется предупреждением.
Вы можете увидеть демонстрацию такого предупреждения по адресу https://astariul.github.io/github-hosted-pypi/transformers/.
Если вы видите это предупреждение, не устанавливайте пакет! Вместо этого измените название вашего пакета или обновите версию над его общедоступным аналогом.
Будьте осторожны!
Проблемы и PR приветствуются!
Если вы столкнетесь с чем -то странным / это можно улучшить, свяжитесь с нами!
Это очень вдохновляется на это хранилище.
Это просто прославленная версия, с более чистыми страницами и действиями GitHub для легкого добавления, обновления и удаления пакетов из вашего индекса.
Также проверьте пост блога оригинального автора!
Значок, используемый на странице, был сделан Freepik из Flaticon