Build and Deploy#

🛠 Сделаем скрипт build_and_publish.sh:#

  1. Соберет .whl и .tar.gz для пакета,

  2. Очистит старые артефакты,

  3. Копирует их в папку локального PyPI-сервера (~/my-pypi-server).


📄 Пример скрипта#

Создай файл build_and_publish.sh в корне своего пакета (packages/nlp/):

#!/bin/bash

set -e  # Остановиться при ошибке

PACKAGE_DIR=$(pwd)            # Текущая папка пакета
DIST_DIR="$PACKAGE_DIR/dist"  # Где появляются .whl и .tar.gz
LOCAL_PYPI=~/my-pypi-server    # Куда выкладываем готовые файлы

echo "Очистка старых сборок..."
rm -rf "$DIST_DIR"

echo "Сборка пакета..."
python -m build

echo "Копирование новых файлов в локальный PyPI сервер..."
cp "$DIST_DIR"/* "$LOCAL_PYPI/"

echo "Готово! 🎉"

🚀 Как пользоваться#

  1. Сделай скрипт исполняемым:

chmod +x build_and_publish.sh
  1. Запускай его когда нужно собрать и обновить пакет:

./build_and_publish.sh

И всё!
В папке ~/my-pypi-server/ автоматически окажутся свежие .whl и .tar.gz.


🔥 Что ты выигрываешь#

Без скрипта

Со скриптом

Ручная сборка + копирование каждый раз

Одна команда для всего

Риск забыть что-то скопировать

Гарантия чистой и полной выкладки


📦 Бонусный уровень: Makefile#

Если хочешь сделать ещё красивее (особенно если пакетов будет много), можно написать Makefile.

Пример Makefile:

PACKAGE_DIR = $(shell pwd)
DIST_DIR = $(PACKAGE_DIR)/dist
LOCAL_PYPI = ~/my-pypi-server

build:
	rm -rf $(DIST_DIR)
	python -m build
	cp $(DIST_DIR)/* $(LOCAL_PYPI)/

.PHONY: build

Тогда будет достаточно команды:

make build

И он сделает всё то же самое.


✨ Итого#

Теперь у тебя полный процесс:

Этап

Что делаем

Собрать пакет

./build_and_publish.sh или make build

Обновить сервер

Автоматически

Установить в новом проекте

pip install --index-url http://localhost:8080/simple/ nlp