Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Python-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² PyPI ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΠΏΠ»Π°Π½ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ Π΄Π²ΡΡ ΡΠ°ΠΊΡΠΎΡΠ½ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΡΡ . ΠΠ°ΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΈΡΠ»Ρ Π·Π°Π³ΡΡΠ·ΠΎΠΊ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΠΊ ΡΡΡΡΠ½ΡΠΌ Π·Π°ΠΏΠΈΡΡΠΌ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΡ ΠΈ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅Π² ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ 1% ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π»ΠΈΠ΄ΠΈΡΡΡΡΠΈΡ ΠΏΠΎ ΡΠΈΡΠ»Ρ Π·Π°Π³ΡΡΠ·ΠΎΠΊ Π·Π° 6 ΠΌΠ΅ΡΡΡΠ΅Π². Π‘ ΡΡΡΡΠΎΠΌ, ΡΡΠΎ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ PyPI Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ 350 ΡΡΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π΄Π²ΡΡ ΡΠ°ΠΊΡΠΎΡΠ½Π°Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π΄Π»Ρ 3500 ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ ΡΡΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ°. Π’ΠΎΡΠ½Π°Ρ Π΄Π°ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄Π²ΡΡ ΡΠ°ΠΊΡΠΎΡΠ½ΠΎΠΉ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠ΅ ΠΌΠ΅ΡΡΡΡ.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° Π΄Π²ΡΡ ΡΠ°ΠΊΡΠΎΡΠ½ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² RubyGems, NPM ΠΈ GitHub, Π² PyPI Π±ΡΠ΄Π΅Ρ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½Π° ΡΡ Π΅ΠΌΠ°, ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡΠ°Ρ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅Π½Π° Ρ ΠΊΠ»ΡΡΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΡΠΈΠ½Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° WebAuthn ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠ°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΡ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ TOTP Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° Π² ΡΠΎΡΠΌΠ΅ ΠΎΠΏΡΠΈΠΈ).
Π’ΠΎΠΊΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ — ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Google Π²ΡΡΡΡΠΏΠΈΠ»Π° ΡΠΏΠΎΠ½ΡΠΎΡΠΎΠΌ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Ρ ΠΈ Π²ΡΠ΄Π΅Π»ΠΈΠ»Π° Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° 4000 ΠΊΠ»ΡΡΠ΅ΠΉ Titan. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π°ΡΡ Π·Π°ΡΠ²ΠΊΡ Π½Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ USB-C ΠΈΠ»ΠΈ USB-A. ΠΡΠΎΡΠΎΠΉ ΡΠΎΠΊΠ΅Π½ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ Π½Π° ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΠ»ΠΎΠΌΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ΅ΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΠΊ ΠΏΠΎΡΠ΅ΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈ ΠΈΠ·Π±Π°Π²ΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ°.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠΎΠΊΠ΅Π½Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΠ²ΡΡΡΠΈΡ, ΠΠ΅Π»ΡΠ³ΠΈΡ, ΠΠ°Π½Π°Π΄Ρ, Π€ΡΠ°Π½ΡΠΈΡ, ΠΠ΅ΡΠΌΠ°Π½ΠΈΡ, ΠΡΠ°Π»ΠΈΡ, Π―ΠΏΠΎΠ½ΠΈΡ, ΠΡΠΏΠ°Π½ΠΈΡ, Π¨Π²Π΅ΠΉΡΠ°ΡΠΈΡ, ΠΠ΅Π»ΠΈΠΊΠΎΠ±ΡΠΈΡΠ°Π½ΠΈΡ ΠΈ Π‘Π¨Π. Π‘ΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΠ΅ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΡΡΠ°Π½ ΠΌΠΎΠ³ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΡΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ FIDO U2F ΡΠΎΠΊΠ΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΡΠΎΠΊΠ΅Π½Ρ Yubikey ΠΈ Thetis. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠΊΠ΅Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° Π±Π°Π·Π΅ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΡ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» TOTP, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Authy, Google Authenticator ΠΈ FreeOTP.
ΠΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Π° Π½Π΅ ΠΎΠ±ΠΎΡΠ»Π°ΡΡ Π±Π΅Π· ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠ°. ΠΠ²ΡΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Atomicwrites, Π½Π°ΡΡΠΈΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ 6 ΠΌΠ»Π½ Π·Π°Π³ΡΡΠ·ΠΎΠΊ Π² ΠΌΠ΅ΡΡΡ ΠΈ 38 ΠΌΠ»Π½ Π·Π° 6 ΠΌΠ΅ΡΡΡΠ΅Π², Π½Π΅ ΠΏΠΎΠΆΠ΅Π»Π°Π» ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π½Π° Π΄Π²ΡΡ ΡΠ°ΠΊΡΠΎΡΠ½ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΡΡ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ ΡΠ±ΡΠΎΡΠΈΡΡ ΡΡΡΡΡΠΈΠΊ Π·Π°Π³ΡΡΠ·ΠΎΠΊ. ΠΠ»Ρ ΡΠ±ΡΠΎΡΠ° ΠΎΠ½ Π²Π½Π°ΡΠ°Π»Π΅ ΡΠ΄Π°Π»ΠΈΠ» ΠΏΠ°ΠΊΠ΅Ρ, Π° ΠΏΠΎΡΠΎΠΌ Π·Π°Π³ΡΡΠ·ΠΈΠ» Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ. ΠΠΆΠΈΠ΄Π°Π»ΠΎΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡ Π»ΠΈΡΡ ΡΠ±ΡΠΎΡΠΈΡ ΡΡΡΡΡΠΈΠΊ, Π½ΠΎ ΠΊ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π±ΡΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½Ρ ΠΈ Π²ΡΠ΅ ΡΡΠ°ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Ρ Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ°Π²Π½ΠΈΠ»ΠΈ Ρ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠΎΠΌ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° left-pad Π² NPM.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΠ³ΡΠ±ΠΈΠ»Π°ΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π°Π²ΡΠΎΡ atomicwrites Π½Π΅ ΡΠΌΠΎΠ³ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΡΠ°ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π»ΠΈΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π΄Π΅Π½Ρ ΠΏΠΎΡΠ»Π΅ Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ² PyPI. ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π΄ΡΠ΅Π³ΠΎ Π°Π²ΡΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠΈΠ½ΡΠ» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ atomicwrites ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ°Π·ΡΡΠ΄ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΡ . Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΡΠΈΠ½Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠ°ΠΊ Ρ ΠΎΠ±Π±ΠΈ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΡΠ»ΠΎΠΆΠ½ΡΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ, Π½Π΅ ΡΡΠΎΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π·Π°ΡΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ΅ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Ρ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡΡ. ΠΠ²ΡΠΎΡ atomicwrites ΡΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ» ΠΏΡΠΎΡΡΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ°Π·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ, Π° Π·Π°Π±ΠΎΡΡ ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°ΡΠΈΡΠ΅ ΠΎΡ Π·Π°Ρ Π²Π°ΡΠ° Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·Π²Π°Π»ΠΈΡΡ Π½Π° ΡΠ΅Π±Ρ ΠΊΠΎΠ³Π΄Π° Π·Π° ΡΡΠΎ ΠΏΠ»Π°ΡΡΡ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° atomicwrites ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠΊΠΎΠ»ΠΎ 200 ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ². Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ os.replace ΠΈ os.rename (ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°ΠΉΠ» Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΏΠΎΡΠ»Π΅ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ).
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru