Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡ Π² Rust-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠ° TAR, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠ°Ρ ΠΊ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΠ²Π°
Π Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Rust Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ async-tar, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ tar-Π°ΡΡ ΠΈΠ²ΠΎΠ², Π²ΡΡΠ²Π»Π΅Π½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ (CVE-2025-62518, ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ TARmageddon), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΏΡΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ tar-Π°ΡΡ ΠΈΠ²Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΠ΅ Π² Π½ΡΠΌ ΡΠ°ΠΉΠ»Ρ, Π½ΠΎ ΠΈ ΡΠ°ΠΉΠ»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ tar-Π°ΡΡ ΠΈΠ²Π΅. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΎΠ±Ρ ΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π°ΡΡ ΠΈΠ²ΠΎΠ² ΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ², Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°.
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΡΠΎΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ async-tar, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ tokio-tar, krata-tokio-tar ΠΈ astral-tokio-tar, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΡΠΈΠ»ΠΈΡΠ°Ρ Π½Π° ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ uv, ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ Β«pipΒ» Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ Python. ΠΠ· ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡΠ·Π²ΠΈΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ testcontainers Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° docker-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΈ WebAssembly runtime wasmCloud. Π ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ crates.is Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 90 Π΄Π½Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° async-tar Π½Π°ΡΡΠΈΡΡΠ²Π°Π΅Ρ 1.3 ΠΌΠ»Π½ Π·Π°Π³ΡΡΠ·ΠΎΠΊ, tokio-tar - 2.2 ΠΌΠ»Π½, testcontainers - 2.9 ΠΌΠ»Π½.
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡ Π²ΡΠ·Π²Π°Π½Π° Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΏΡΠΈ ΡΠ°Π·Π±ΠΎΡΠ΅ ΡΠ°Π·Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ ustar ΠΈ PAX. Π tar-Π°ΡΡ ΠΈΠ²Π°Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ PAX Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π²Π½ΡΡΡΠΈ Π°ΡΡ ΠΈΠ²Π° ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π΄Π²Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° - ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ustar ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ PAX. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ·Π²Π°Π½Π° ΡΠ΅ΠΌ, ΡΡΠΎ ΡΡΠ·Π²ΠΈΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΡΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ· ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° PAX, Π±ΡΠ°Π»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ· ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ustar. ΠΡΠΈ Π½ΡΠ»Π΅Π²ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ustar, ΠΈΠ΄ΡΡΠ΅Π΅ Π·Π° Π½ΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΎΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ TAR-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°.
ΠΠ»Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΡ Π°ΡΠ°ΠΊΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ TAR-Π°ΡΡ ΠΈΠ², Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π² ustar-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΡΠΊΠ°Π·Π°Π½ Π½ΡΠ»Π΅Π²ΠΎΠΉ ΡΠ°Π·ΠΌΠ΅Ρ, Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠ° PAX Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° Ρ Π΄ΡΡΠ³ΠΈΠΌ tar-Π°ΡΡ ΠΈΠ²ΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΠ²Π°. ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π°ΡΡ ΠΈΠ²ΠΎΠ² ΡΠ°Π·ΠΌΠ΅ΡΡΠ½ Π½Π° GitHub. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΡΡΡΡΠ°Π½Π΅Π½Π° Π² Π²ΡΠΏΡΡΠΊΠ°Ρ tokio-tar 0.5.6 ΠΈ uv 0.9.5. ΠΠ»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ, Π½ΠΎ Π΄Π»Ρ astral-tokio-tar, async-tar ΠΈ krata-tokio-tar ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Ρ ΠΏΠ°ΡΡΠΈ.
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ ΡΡΠΎΠ²Π΅Π½Ρ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ 8.1 ΠΈΠ· 10, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² (Π² ΡΡΠ·Π²ΠΈΠΌΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ Π½Π΅ ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΡΠΎ Π±ΡΠ»ΠΈ Π²ΠΈΠ΄Π½Ρ Π² Π°ΡΡ ΠΈΠ²Π΅). ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ Π² ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ uv ΠΎΡΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ Π½Π΅ΠΎΠΏΠ°ΡΠ½Π°Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π°ΡΠ°ΠΊΡΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π²Π»ΠΈΡΡΡ Π½Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΠ²Π°, Π½Π΅Ρ ΡΠΌΡΡΠ»Π° ΡΡΠ»ΠΎΠΆΠ½ΡΡΡ Π°ΡΠ°ΠΊΡ ΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΡΠ΅ΡΠ΅Π· Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π°ΡΡ ΠΈΠ², ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· ΡΠ±ΠΎΡΠΎΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π°ΡΡ ΠΈΠ²Π΅.
ΠΡΡΠ²ΠΈΠ²ΡΠΈΠ΅ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Π°ΡΠ°ΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΠΎΠ±ΠΎΠΉΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· Π·Π°ΠΌΠ΅Π½Ρ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²ΠΎ Π² ΡΠ±ΠΎΡΠΎΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΡΠ»Π°Π½Π½ΡΠΉ Π°ΡΡ ΠΈΠ² ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΊΠ°Π½Π΅ΡΠΎΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΡΡΠ½ΠΎΠΉ Π°ΡΠ΄ΠΈΡ, Π² Ρ ΠΎΠ΄Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠΈΠΉ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠΈΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΡΠ°Π½Π½ΡΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π°ΡΡ ΠΈΠ² Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΡΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Rust-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈΠ· Π°ΡΡ ΠΈΠ²Π° Π±ΡΠ΄Π΅Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΎ ΠΈΠ½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅, ΡΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΡΠ°ΠΊΡΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π°ΡΡ ΠΈΠ² Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ PyPI, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΉΠ΄ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΠ²Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΡΠΉ ΡΠ°ΠΉΠ» pyproject.toml. ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠΈΠ»ΠΈΡΡ uv Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΡΠΉ pyproject.toml Π±ΡΠ΄Π΅Ρ Π·Π°ΠΌΠ΅Π½ΡΠ½ Π½Π° Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΠ²Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈΠ»ΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΡΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ°Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ testcontainers.