22
33## 🚀 Автоматическая публикация в PyPI через GitHub Actions  
44
5+ ### 📦 Современные стандарты упаковки  
6+ 
7+ Этот проект использует современные стандарты Python упаковки:
8+ -  ** pyproject.toml**  вместо setup.py
9+ -  ** SPDX лицензии**  вместо устаревших классификаторов
10+ -  ** Современные инструменты сборки**  (build, twine)
11+ -  ** GitHub Actions**  для автоматизации
12+ 
513### Как это работает  
614
7151 .  ** Создается git тег**  с версией (например, ` v2.1.0 ` )
1523
1624### 📋 Предварительная настройка (только один раз)  
1725
18- #### Шаг 1: Создание API токена PyPI  
26+ #### Шаг 1: Настройка Trusted Publisher (рекомендуется)  
27+ 
28+ ** Современный и безопасный способ:** 
29+ 
30+ 1 .  Запустите workflow в GitHub Actions (создайте тег)
31+ 2 .  В логах найдите ссылку для создания Trusted Publisher
32+ 3 .  Перейдите по ссылке и войдите в PyPI как владелец пакета
33+ 4 .  Подтвердите настройку Trusted Publisher
34+ 
35+ ** Альтернативный способ - API токен (устаревший):** 
1936
20371 .  Зайдите на [ PyPI] ( https://pypi.org/ )  и войдите в свой аккаунт
21382 .  Перейдите в ** Account settings**  → ** API tokens** 
22393 .  Нажмите ** Add API token** 
23404 .  Выберите ** Entire account (all projects)** 
24415 .  Скопируйте созданный токен (выглядит как ` pypi-... ` )
2542
26- #### Шаг 2: Настройка GitHub Secrets  
43+ #### Шаг 2: Настройка GitHub Secrets (только для API токенов)  
44+ 
45+ ** Если используете Trusted Publisher (рекомендуется):** 
46+ -  Секреты не нужны! 🎉
2747
48+ ** Если используете API токен (устаревший способ):** 
28491 .  Перейдите в ваш GitHub репозиторий
29502 .  Нажмите ** Settings**  → ** Secrets and variables**  → ** Actions** 
30513 .  Нажмите ** New repository secret** 
35561 .  В том же разделе ** Secrets and variables**  → ** Actions** 
36572 .  Перейдите на вкладку ** Environments** 
37583 .  Нажмите ** New environment** 
38- 4 .  Назовите среду ` pypi ` 
59+ 4 .  Назовите среду ` release `  (важно для Trusted Publisher!) 
39605 .  В разделе ** Environment protection rules**  можете добавить правила (опционально)
61+ 6 .  ** Рекомендуется** : Настроить правила для защиты от случайной публикации
4062
4163### 🔄 Процесс публикации новой версии  
4264
@@ -121,14 +143,17 @@ git push origin v2.1.0
121143
122144### ✅ Преимущества этого подхода  
123145
124- -  🔒 ** Безопасность** : API токен хранится в GitHub Secrets 
146+ -  🔒 ** Безопасность** : Использует Trusted Publishers вместо API токенов 
125147-  🤖 ** Автоматизация** : Не нужно вручную собирать и загружать
126- -  🆕 ** Современность** : Использует современные инструменты сборки
148+ -  🆕 ** Современность** : Использует современные инструменты сборки и аутентификации 
127149-  📝 ** Аудит** : Все действия логируются в GitHub Actions
128150-  🎯 ** Контроль** : Можно настроить правила для environment
129151-  🏷️ ** Теги** : Четкая связь между git тегами и версиями PyPI
152+ -  🚀 ** Простота** : Не нужно управлять секретами и токенами
130153
131- ** ⚠️ Важное напоминание** : Каждая новая версия требует создания нового git тега. Без тега workflow не запустится!
154+ ** ⚠️ Важное напоминание** : 
155+ -  Каждая новая версия требует создания нового git тега. Без тега workflow не запустится!
156+ -  ** Название среды должно быть ` release ` **  (не ` pypi ` ) для корректной работы с Trusted Publisher
132157
133158### 🚨 Troubleshooting  
134159
@@ -139,10 +164,18 @@ git push origin v2.1.0
1391644 .  Проверьте настройки в ** Settings**  → ** Actions**  → ** General** 
1401655 .  ** Помните** : workflow запускается только при создании новых тегов, не при коммитах
141166
167+ #### Если возникают предупреждения при сборке:  
168+ 1 .  ** Проверьте формат лицензии**  в ` pyproject.toml `  - используйте простую строку ` license = "Apache-2.0" ` 
169+ 2 .  ** Уберите устаревшие классификаторы лицензии**  - они больше не нужны при использовании SPDX выражения
170+ 3 .  ** Обновите setuptools**  до версии >=77.0.0 для лучшей поддержки современных стандартов
171+ 
142172#### Если публикация в PyPI не удалась:  
1431731 .  Проверьте логи в GitHub Actions
144- 2 .  Убедитесь, что ` PYPI_API_TOKEN `  правильно настроен
145- 3 .  Проверьте, что environment ` pypi `  создан
174+ 2 .  ** Для Trusted Publisher** : Убедитесь, что Trusted Publisher настроен в PyPI
175+ 3 .  ** Для API токена** : Убедитесь, что ` PYPI_API_TOKEN `  правильно настроен
176+ 4 .  ** Проверьте, что environment ` release `  создан**  (не ` pypi ` !)
177+ 5 .  ** Если используете Trusted Publisher** : Убедитесь, что workflow запущен из правильного репозитория
178+ 6 .  ** Проверьте название среды** : должно быть ` release `  в Trusted Publisher
146179
147180#### Если пакет не собирается:  
1481811 .  Проверьте синтаксис ` pyproject.toml ` 
@@ -160,17 +193,35 @@ pip install build twine
160193#  Собрать пакет
161194python -m build --wheel --sdist
162195
163- #  Загрузить в PyPI (требует настройки ~/.pypirc)
196+ #  Загрузить в PyPI
197+ #  Для Trusted Publisher: используйте GitHub Actions (рекомендуется)
198+ #  Для API токена: настройте ~/.pypirc или используйте --username/--password
164199python -m twine upload dist/* 
165200``` 
166201
167202### 📚 Полезные ссылки  
168203
169204-  [ GitHub Actions Documentation] ( https://docs.github.com/en/actions ) 
170- -  [ PyPI API Tokens] ( https://pypi.org/help/api-tokens/ ) 
205+ -  [ PyPI Trusted Publishers] ( https://docs.pypi.org/trusted-publishers/ )  ⭐ ** Новое!** 
206+ -  [ PyPI API Tokens] ( https://pypi.org/help/api-tokens/ )  (устаревший способ)
171207-  [ Python Packaging User Guide] ( https://packaging.python.org/ ) 
172208-  [ GitHub Releases] ( https://docs.github.com/en/repositories/releasing-projects-on-github ) 
173209
210+ ### 🔄 Миграция с API токена на Trusted Publisher  
211+ 
212+ Если у вас уже настроен API токен и вы хотите перейти на Trusted Publisher:
213+ 
214+ 1 .  ** Создайте новый тег**  для запуска workflow
215+ 2 .  ** Настройте Trusted Publisher**  по ссылке из логов
216+ 3 .  ** Удалите секрет**  ` PYPI_API_TOKEN `  из GitHub Secrets
217+ 4 .  ** Убедитесь** , что workflow работает без предупреждений
218+ 
219+ ** Преимущества миграции:** 
220+ -  🔒 Более безопасно (нет токенов для хранения)
221+ -  🚀 Проще в настройке
222+ -  📱 Лучшая поддержка мобильных устройств
223+ -  🆕 Соответствие современным стандартам PyPI
224+ 
174225--- 
175226
176227** Теперь ваша публикация полностью автоматизирована! 🎉** 
0 commit comments