Примеры работы с PyPI-реестрами
В этом разделе приведены пошаговые примеры для различных типов PyPI-реестров.
Создание и использование реестров
Локальный реестр
-
Создайте реестр:
yc cloud-registry registry create \ --name my-pypi-local \ --registry-kind pypi \ --registry-type local \ --description "Local PyPI registry"Результат:
id: e5o6a2blpkb6******** name: my-pypi-local kind: PYPI type: LOCAL -
Создайте пакет:
mkdir -p my_package/my_package cd my_packageСоздайте файл
my_package/__init__.py:def hello(): return "Hello from my package!"Создайте
pyproject.toml:[build-system] requires = ["setuptools"] [project] name = "my_package" version = "0.0.1" authors = [{ name="Example Author", email="author@example.com" }] description = "A small example package" readme = "README.md" requires-python = ">=3.9" classifiers = [ "Programming Language :: Python :: 3", "Operating System :: OS Independent", ]Создайте
README.md:# My Package Это пример Python-пакета. -
Настройте аутентификацию:
Создайте
~/.pypirc:[distutils] index-servers = cloud-registry [cloud-registry] repository = https://registry.yandexcloud.net/pypi/e5o6a2b********/legacy/ username = iam password = <IAM-токен> -
Соберите пакет и опубликуйте:
python3 -m venv my-venv && source my-venv/bin/activate python3 -m pip install build twine python3 -m build python3 -m twine upload --repository cloud-registry dist/* -
Установите пакет:
pip install my_package \ --index-url https://iam:$(yc iam create-token)@registry.yandexcloud.net/pypi/e5o6a2blpkb6********/simple/ \ --no-cacheПроверка:
python3 -c "from my_package import hello; print(hello())" # Hello from my package!
Удаленный реестр
-
Создайте реестр:
yc cloud-registry registry create \ --name my-pypi-remote \ --registry-kind pypi \ --registry-type remote \ --description "Remote PyPI proxy" \ --properties source=@pypiРезультат:
id: e5o7b3cmqlc7******** name: my-pypi-remote kind: PYPI type: REMOTE -
Установите пакет (первый раз):
При первой установке пакет загружается из публичного PyPI и сохраняется в кеш:
pip install pytest==9.0.1 \ --index-url https://iam:$(yc iam create-token)@registry.yandexcloud.net/pypi/e5o7b3cmqlc7********/simple/ \ --no-cache -
Установите пакет (повторно):
При повторной установке пакет загружается из кеша:
pip install pytest==9.0.1 \ --index-url https://iam:$(yc iam create-token)@registry.yandexcloud.net/pypi/e5o7b3cmqlc7********/simple/ \ --no-cache -
Установите другой пакет:
pip install requests==2.31.0 \ --index-url https://iam:$(yc iam create-token)@registry.yandexcloud.net/pypi/e5o7b3cmqlc7********/simple/ \ --no-cache
Примечание
Все установленные пакеты кешируются в реестре. При следующей установке они будут загружаться из кеша.
Виртуальный реестр
-
Создайте реестр:
Объедините локальный (
cn1mfr50********) и удаленный (cn1ihsdl********) реестры:yc cloud-registry registry create \ --name my-pypi-virtual \ --description "Виртуальный реестр" \ --registry-kind pypi \ --registry-type virtual \ --properties "readOnly=false,deploymentRegistryId=cn1mfr50********,registryIds=cn1mfr50********;cn1ihsdl********"Результат:
id: e5o9d5eosne9******** name: my-pypi-virtual kind: PYPI type: VIRTUAL -
Установите внутренний пакет:
Виртуальный реестр сначала ищет в локальном реестре:
pip install my_package \ --index-url https://iam:$(yc iam create-token)@registry.yandexcloud.net/pypi/e5o9d5eosne9********/simple/ \ --no-cache -
Установите публичный пакет:
Если пакет не найден в локальном, ищет в удаленном:
pip install pytest==9.0.1 \ --index-url https://iam:$(yc iam create-token)@registry.yandexcloud.net/pypi/e5o9d5eosne9********/simple/ \ --no-cache -
Установите несколько пакетов:
pip install my_package pytest==9.0.1 requests==2.31.0 \ --index-url https://iam:$(yc iam create-token)@registry.yandexcloud.net/pypi/e5o9d5eosne9********/simple/ \ --no-cache