Π ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Python-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² PyPI (Python Package Index) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΡΠΈΡΡΠ½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π½Π° Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² GitHub Actions) ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ ΠΈ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° ΠΊ API. ΠΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ‘Trusted Publishers’ ΠΈ ΠΏΡΠΈΠ·Π²Π°Π½ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΠΌΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠ°ΡΠΈΠΈ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² ΡΡΠΊΠΈ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ² ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ ΡΠΎΠΊΠ΅Π½ΠΎΠ².
ΠΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ° OpenID Connect (OIDC), ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ PyPI Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ Π»ΠΎΠ³ΠΈΠ½Π°/ΠΏΠ°ΡΠΎΠ»Ρ ΠΈΠ»ΠΈ Π²ΡΡΡΠ½ΡΡ ΡΠ³Π½Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° ΠΊ API. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° «Trusted Publishers» ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ Π² GitHub Actions. Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Trusted Publishers ΠΈ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
Π‘ΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ PyPI Π²ΡΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊ Π΄ΠΎΠ²Π΅ΡΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°ΠΌ OpenID (IdP, OpenID Connect Identity Provider), ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° Ρ PyPI Π½Π΅Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡΡΠΈΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ². ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠΎΠΊΠ΅Π½Ρ OpenID Connect ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ PyPI Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΎΠΎΡΠ½ΠΎΡΠΈΡΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ. Π’ΠΎΠΊΠ΅Π½Ρ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Ρ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ API ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΎΡΡΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Sonatype Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ Π²ΡΡΠ²Π»Π΅Π½ΠΈΠΈ Π² ΠΌΠ°ΡΡΠ΅ 2023 Π³ΠΎΠ΄Π° 6933 Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ PyPI. ΠΡΠ΅Π³ΠΎ Ρ 2019 Π³ΠΎΠ΄Π° ΡΠΈΡΠ»ΠΎ Π²ΡΡΠ²Π»Π΅Π½Π½ΡΡ
Π² PyPI Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΡΠ΅Π²ΡΡΠΈΠ»ΠΎ 115 ΡΡΡΡΡ. ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΌΠ°ΡΠΊΠΈΡΡΡΡΡΡ ΠΏΠΎΠ΄ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ°ΠΉΠΏΡΠΊΠ²ΠΎΡΠΈΠ½Π³Π° (Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ
ΠΎΠΆΠΈΡ
ΠΈΠΌΡΠ½, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΡ
ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, exampl Π²ΠΌΠ΅ΡΡΠΎ example, djangoo Π²ΠΌΠ΅ΡΡΠΎ django, pyhton Π²ΠΌΠ΅ΡΡΠΎ python ΠΈ Ρ.ΠΏ.) — Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΈ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ Π½Π° Π½Π΅Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠΎΠ²Π΅ΡΡΠΈΠ²ΡΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΊΡ ΠΈΠ»ΠΈ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠ²ΡΠΈΡ
ΠΎΡΠ»ΠΈΡΠΈΠΉ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅. ΠΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ²ΠΎΠ΄ΡΡΡΡ ΠΊ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
, Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ
Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΏΠ°ΡΠΎΠ»ΡΠΌΠΈ, ΠΊΠ»ΡΡΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°, ΠΊΡΠΈΠΏΡΠΎΠΊΠΎΡΠ΅Π»ΡΠΊΠ°ΠΌΠΈ, ΡΠΎΠΊΠ΅Π½Π°ΠΌΠΈ, ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Cookie ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru