{"id":343212,"date":"2022-12-27T09:03:20","date_gmt":"2022-12-27T09:03:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=343212"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2022-12-27T09:03:20","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=343212","title":{"rendered":"<span>\u0423 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c alpine \u0434\u043b\u044f python-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0435\u0433\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430 PyCon <a href=\"https:\/\/www.youtube.com\/watch?v=KKAtq2Yx-l8\" rel=\"noopener noreferrer nofollow\">&#171;\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f Python \u0431\u0435\u0437 \u0431\u043e\u043b\u0438&#187;<\/a>. \u041d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0441\u044c \u0441\u043e \u0441\u043f\u043e\u0440\u0430\u043c\u0438 \u043a\u0430\u043a\u043e\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432: alpine \u0438\u043b\u0438 debian. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0435\u0441\u0442\u044c \u0438 \u0443 \u0442\u043e\u0439, \u0438 \u0443 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043d\u043e \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434\u043e\u0435\u043b\u043e, \u0447\u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0430\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 &#171;\u0412 \u043d\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u0438\u043a\u043e\u043c\u0443, \u0434\u0430\u0436\u0435 \u0441\u0435\u0431\u0435. \u041d\u043e \u043c\u043d\u0435 &#8212; \u043c\u043e\u0436\u043d\u043e.&#187; (\u0441)<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/201\/140\/5e5\/2011405e556f32d4e430e18f9c79941f.png\" alt=\"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 dive\" title=\"\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 dive\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/201\/140\/5e5\/2011405e556f32d4e430e18f9c79941f.png\"\/><figcaption>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 dive<\/figcaption><\/figure>\n<h2>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b alpine \u0438 debian<\/h2>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 python-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u0434 alpine, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442.<\/p>\n<p><a href=\"https:\/\/github.com\/debuerreotype\/docker-debian-artifacts\/blob\/b6a83caf7b05e44f249ecfc0eb2ccca8cc164c1c\/bullseye\/Dockerfile\" rel=\"noopener noreferrer nofollow\">Debian<\/a>:<\/p>\n<pre><code>FROM scratch ADD rootfs.tar.xz \/ CMD [\"bash\"]<\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/alpinelinux\/docker-alpine\/blob\/a791ed3b042cb15f4dda594dd2fb088dcb725542\/x86_64\/Dockerfile\" rel=\"noopener noreferrer nofollow\">Alpine<\/a><\/p>\n<pre><code>FROM scratch ADD alpine-minirootfs-3.17.0-x86_64.tar.gz \/ CMD [\"\/bin\/sh\"]<\/code><\/pre>\n<p>\u0422.\u0435. \u0447\u0442\u043e alpine, \u0447\u0442\u043e debian, \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u043f\u043e \u0441\u0443\u0442\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u043a\u0443\u0434\u0430 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u041a\u0441\u0442\u0430\u0442\u0438, alpine-minirootfs-3.17.0-x86_64.tar.gz \u0432\u0435\u0441\u0438\u0442 \u0432\u0441\u0435\u0433\u043e 3 Mb, \u0430 rootfs.tar.xz \u0430\u0436 31 Mb. \u0412 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 6.7 Mb \u0438 122 Mb \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0412\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438? \u0417\u0430 \u0441\u0447\u0451\u0442 \u0447\u0435\u0433\u043e? \u0421\u0440\u0430\u0432\u043d\u0438\u043c 2 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6bd\/64d\/65f\/6bd64d65fccc3eb7ce4b331e748d71d6.png\" alt=\"\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043a\u0430\u043a \u043c\u043e\u0433\u0443\" title=\"\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043a\u0430\u043a \u043c\u043e\u0433\u0443\" width=\"531\" height=\"607\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6bd\/64d\/65f\/6bd64d65fccc3eb7ce4b331e748d71d6.png\"\/><figcaption>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043a\u0430\u043a \u043c\u043e\u0433\u0443<\/figcaption><\/figure>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u0435\u0437\u0434\u0435. \u041d\u043e \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 usr &#8212; \u0430\u0436 100 Mb! \u0417\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u043d\u0435\u0433\u043e (\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e \u0432\u0441\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 100k \u0438\u043d\u0430\u0447\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439):<\/p>\n<pre><code class=\"bash\">\u279c  \/opt\/debain\/usr du -h -d 2 -t 100k . 14M   .\/bin 532K  .\/share\/info 31M   .\/share\/locale 168K  .\/share\/keyrings 128K  .\/share\/gcc 5,3M  .\/share\/man 13M   .\/share\/doc 264K  .\/share\/common-licenses 536K  .\/share\/perl5 344K  .\/share\/bash-completion 124K  .\/share\/lintian 5,0M  .\/share\/zoneinfo 56M   .\/share 1,9M  .\/lib\/locale 1,1M  .\/lib\/apt 36M   .\/lib\/x86_64-linux-gnu 39M   .\/lib 2,2M  .\/sbin 111M  .<\/code><\/pre>\n<p>\u0422.\u0435. \u043f\u043e\u0433\u043e\u0434\u0438\u0442\u0435 &#8212; 31 Mb \u043f\u043e\u0434 \u043b\u043e\u043a\u0430\u043b\u0438? 13 Mb &#8212; \u043f\u043e\u0434 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e? \u0442\u0430\u043c \u0435\u0449\u0451 gconv \u043d\u0430 7.6 Mb? \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 debian, \u0432\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043c \u043c\u0435\u0441\u0442\u043e \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435?! \u041a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u043d\u0443\u0436\u0435\u043d man \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430? \u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432 \/bin \u0438 \/sbin \u0435\u0441\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0433\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u0434\u043a\u043e (\u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430): lsblk, df, debugfs, swapon\/swapoff&#8230; \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043c\u0443\u0441\u043e\u0440, \u043d\u043e \u043a\u0442\u043e \u044f \u0442\u0430\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u043f\u043e\u0440\u0438\u0442\u044c \u0441 \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0436\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u043d\u0435 \u0434\u043e 7 Mb, \u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0432 2 \u0440\u0430\u0437\u0430 &#8212; \u0434\u043e 50 Mb. \u041d\u043e \u0432\u0441\u0451 \u044d\u0442\u043e, \u043a\u0430\u043a \u043d\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043c\u0435\u043b\u043e\u0447\u0438. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 alpine \u043e\u0442 debian \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430\u0445. \u0415\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \/bin, \u0442\u043e \u0432 debian \u043b\u0435\u0436\u0430\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0443 alpine \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \/bin\/busybox. \u0418 \u0442\u0443\u0442 \u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 &#171;\u0430 \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 alpine linux?&#187;.<\/p>\n<h2>\u0420\u0435\u043c\u0430\u0440\u043a\u0430 \u043f\u0440\u043e alpine<\/h2>\n<p>&#171;Small. Simple. Secure. Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.&#187; &#8212; \u0446\u0438\u0442\u0430\u0442\u0430 \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u0442\u044c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430. \u041f\u0440\u043e\u0435\u043a\u0442, \u043a\u0441\u0442\u0430\u0442\u0438, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0440\u044b\u0439 &#8212; \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 2005 \u0433\u043e\u0434\u0430, \u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u043b \u0443\u043f\u043e\u0440 \u043d\u0430 \u043d\u0435\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0438 \u043e\u0442\u0441\u0435\u043a\u0430\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u043d\u0435\u0433\u043e. \u0422.\u0435. \u044d\u0442\u043e \u0431\u044b\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 linux \u043d\u043e \u0431\u0435\u0437 systemd (\u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430 openrc), \u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c extlinux, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c apk \u0438 busybox \u043a\u0430\u043a \u0437\u0430\u043c\u0435\u043d\u0430 GNU coreutils. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0432 \/bin \u0438 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b \/bin\/busybox.<\/p>\n<p>\u041d\u043e \u0441\u0430\u043c\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 &#8212; GNU libc \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u0443\u044e musl libc. \u041a glibc \u0431\u044b\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0430\u0441\u0447\u0451\u0442 \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/habr.com\/ru\/post\/520920\/\" rel=\"noopener noreferrer nofollow\">isalnum() \u043c\u043e\u0433 \u043a\u0438\u043d\u0443\u0442\u044c \u0441\u0435\u0433\u0444\u043e\u043b\u0442<\/a>. \u0422\u0430\u043a \u0447\u0442\u043e alpine \u0445\u043e\u0440\u043e\u0448\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043f\u043e\u0434 \u0432\u0441\u044f\u043a\u0438\u0439 embedded (\u043f\u043e\u043f\u0440\u0430\u0432\u044c\u0442\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0442\u0430\u043a). \u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0431\u0438\u043d\u0430\u0440\u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b, \u0438 \u043e\u0442\u0441\u044e\u0434\u0430 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0438.<\/p>\n<h2>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0432 \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445<\/h2>\n<p>\u041d\u043e \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a python. \u0421\u043f\u0443\u043b\u0438\u043c 2 \u043e\u0431\u0440\u0430\u0437\u0430, \u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0443\u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430, \u043f\u0440\u0430\u0432\u0434\u0430?<\/p>\n<pre><code>\u279c  \/opt docker images REPOSITORY            TAG               IMAGE ID       CREATED         SIZE python                3.10-slim         dae00c0316e5   12 hours ago    126MB python                3.10-alpine       2527f31628e7   13 days ago     50.1MB<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 django-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0437\u044f\u0442\u044b \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043c\u043e\u0435\u0433\u043e \u043f\u0435\u0442-\u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<pre><code>[tool.poetry.dependencies] python = \"^3.10\" Django = \"~3.2\" django-elasticsearch-dsl = \"^7.2.0\" django-enumfields = \"^2.1.1\" djangorestframework = \"^3.12.4\" django-elasticsearch-dsl-drf = \"^0.22.1\" django-filter = \"^2.4.0\" django-cors-headers = \"^3.7.0\" drf-nested-routers = \"^0.93.4\" gunicorn = \"^20.1.0\"<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code>\u279c  \/opt docker images REPOSITORY              TAG               IMAGE ID       CREATED         SIZE django                  debian            3e9fef9d8b54   2 seconds ago   201MB django                  alpine            2f27ca4a1588   16 seconds ago  125MB python                  3.10-slim         dae00c0316e5   12 hours ago    126MB python                  3.10-alpine       2527f31628e7   13 days ago     50.1MB<\/code><\/pre>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432\u0441\u0451 \u0442\u0430 \u0436\u0435 \u0432 70Mb &#8212; \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e. \u0418 \u0435\u0441\u043b\u0438 \u044d\u043a\u0441\u0442\u0440\u0430\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c docker-\u043e\u0431\u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0438\u0442\u044c ~600Mb, \u0442\u043e \u0442\u0430\u043a \u043b\u0438 \u0432\u0430\u0436\u043d\u044b \u044d\u0442\u0438 70Mb?<\/p>\n<p>Ok, \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c django-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u044f \u0432\u043e\u0437\u044c\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0432\u043e\u0439 \u043f\u0435\u0442-\u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 FastAPI \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438:<\/p>\n<pre><code>[tool.poetry.dependencies] python = \"^3.8\" pycairo = \"^1.19.1\" fastapi = \"^0.54.1\" uvicorn = \"^0.11.3\" aiofiles = \"^0.5.0\" SQLAlchemy = {extras = [\"asyncio\"], version = \"^1.4.29\"} alembic = \"^1.7.5\" asyncpg = \"^0.25.0\" elasticsearch = {extras = [\"async\"], version = \"^7.16.2\"}<\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u043d\u044e \u0432 Dockerfile <code>python:3.8-slim<\/code> \u043d\u0430 <code>python:3.8-alpine<\/code> \u0438\u0438\u0438\u0438&#8230;<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ca4\/2ec\/b62\/ca42ecb623b483b639f8f0aa315e45ca.png\" alt=\"\u041f\u0440\u043e\u0441\u044c\u0431\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\" title=\"\u041f\u0440\u043e\u0441\u044c\u0431\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\" width=\"1841\" height=\"101\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca4\/2ec\/b62\/ca42ecb623b483b639f8f0aa315e45ca.png\"\/><figcaption>\u041f\u0440\u043e\u0441\u044c\u0431\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440<\/figcaption><\/figure>\n<p>\u041b\u0430\u0434\u043d\u043e, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044e gcc, \u0445\u043e\u0442\u044f \u043f\u043e\u0434 debian \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c&#8230;<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e98\/daf\/561\/e98daf56126b34934937e0f764d31011.png\" alt=\"\u0418 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a \u043d\u0435\u043c\u0443\" title=\"\u0418 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a \u043d\u0435\u043c\u0443\" width=\"1321\" height=\"150\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e98\/daf\/561\/e98daf56126b34934937e0f764d31011.png\"\/><figcaption>\u0418 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a \u043d\u0435\u043c\u0443<\/figcaption><\/figure>\n<p>ok, \u0441\u0430\u043c \u0434\u0443\u0440\u0430\u043a &#8212; \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u0431\u044b\u043b. \u041a \u0441\u043b\u043e\u0432\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u044f \u043e\u0431\u0435\u0440\u043d\u0443\u043b \u0432<\/p>\n<pre><code>RUN apk add g++ musl-dev --virtual dev \\   &amp;&amp; poetry config virtualenvs.create false \\   ...   &amp;&amp; apk del dev<\/code><\/pre>\n<p>\u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0441\u0442\u043d\u0435\u0435 \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u043d\u044f \u0436\u0434\u0430\u043b\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b84\/5e8\/c4a\/b845e8c4a208b05399fc14217412a2d8.png\" alt=\"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0448\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430\" title=\"\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0448\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430\" width=\"1546\" height=\"102\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b84\/5e8\/c4a\/b845e8c4a208b05399fc14217412a2d8.png\"\/><figcaption>\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0448\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/figcaption><\/figure>\n<p>`Something went wrong bootstrapping makefile fragments` \u0432\u0441\u0435\u043b\u0438\u043b \u0432 \u043c\u0435\u043d\u044f \u0443\u0436\u0430\u0441. \u041a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0432 Makefile \u043c\u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0443\u043b\u044b\u0431\u0430\u043b\u043e\u0441\u044c, \u0430 uvicorn \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c. \u0422\u0430\u043a \u0447\u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e. \u041e\u0431\u0440\u0430\u0437 \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043d\u043e \u043e\u0441\u0430\u0434\u043e\u0447\u0435\u043a-\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u0441\u044f&#8230; \u041a\u0441\u0442\u0430\u0442\u0438, \u0438\u0437-\u0437\u0430 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0439, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0432 2 \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u043e\u0434 python:3.8-slim. \u041e\u043d\u043e \u0438 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e? \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0437\u0436\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0441\u043e\u0431\u0440\u0430\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<pre><code>\u279c  \/opt docker images REPOSITORY                TAG               IMAGE ID       CREATED         SIZE fastapi                   debian            b939da63315f   14 minutes ago  244MB fastapi                   alpine            6f210c82554e   14 minutes ago  111MB<\/code><\/pre>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432 2 \u0440\u0430\u0437\u0430! \u0421\u0435\u0440\u044c\u0451\u0437\u043d\u043e? \u0427\u0443\u0432\u0441\u0442\u0432\u0443\u044e \u0432 \u044d\u0442\u043e\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u043e\u0434\u0432\u043e\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 (\u043f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0437\u0430 \u0441\u0442\u0430\u044e \u0448\u0430\u043a\u0430\u043b\u043e\u0432):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b31\/376\/33e\/b3137633e09886cf651f871528b87dfe.gif\" alt=\"\u0421\u043a\u043b\u0435\u0438\u0432\u0430\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043a\u0430\u043a \u043c\u043e\u0433\u0443\" title=\"\u0421\u043a\u043b\u0435\u0438\u0432\u0430\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043a\u0430\u043a \u043c\u043e\u0433\u0443\" width=\"1200\" height=\"676\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b31\/376\/33e\/b3137633e09886cf651f871528b87dfe.gif\"\/><figcaption>\u0421\u043a\u043b\u0435\u0438\u0432\u0430\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043a\u0430\u043a \u043c\u043e\u0433\u0443<\/figcaption><\/figure>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 pydantic. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 2 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 &#8212; \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440, \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u0447\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a! \u0418\u0434\u0451\u043c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 debian \u0442\u0430\u043c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u0430 \u043f\u043e\u0434 alpine &#8212; python \u043a\u043e\u0434. \u0422.\u0435. \u043f\u043e\u0433\u043e\u0434\u0438\u0442\u0435 &#8212; \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 pydantic \u043f\u043e\u0434 alpine \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u043e\u0434 debain. \u041d\u043e, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u0431\u044b\u0442\u044c? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443.<\/p>\n<h2>\u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 python \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/h2>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 python \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 wheel. \u0415\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 (.tar.gz), \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f setup.py, \u043f\u043e\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d. \u0422\u0430\u043a \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u0432 pypi \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u043d\u043e \u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 CI\/CD wheel-\u043f\u0430\u043a\u0435\u0442\u044b. \u0411\u043b\u0430\u0433\u043e, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432 2 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 (\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Yandex Disk):<\/p>\n<pre><code>$ pip wheel --no-deps . -w dist Processing \/opt\/app\/YaDiskClient   Preparing metadata (setup.py) ... done Building wheels for collected packages: YaDiskClient   Building wheel for YaDiskClient (setup.py) ... done   Created wheel for YaDiskClient: filename=YaDiskClient-0.5.1-py3-none-any.whl size=5238 Successfully built YaDiskClient  $ twine upload dist\/* Uploading distributions to https:\/\/upload.pypi.org\/legacy\/ Uploading YaDiskClient-0.5.1-py3-none-any.whl 100% \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 11.8\/11.8 kB \u2022 00:00 \u2022 9.3 MB\/s View at: https:\/\/pypi.org\/project\/YaDiskClient\/0.5.1\/<\/code><\/pre>\n<p>\u0415\u0449\u0451 \u043f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u0431 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041e\u043f\u0438\u0441\u0430\u043d \u043e\u043d \u0432 PEP 440 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e: <code>{dist}-{version}-{python}-{abi}-{platform}.whl<\/code> (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0430\u043c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439, \u043d\u043e \u043e\u043d\u0438 \u043d\u0430\u043c \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b). \u0427\u0442\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<ul>\n<li>\n<p>dist &#8212; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>version &#8212; \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 (\u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f semver)<\/p>\n<\/li>\n<li>\n<p>python &#8212; \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e python<\/p>\n<\/li>\n<li>\n<p>abi &#8212; \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u043e\u0431\u044b\u0447\u043d\u043e abi3, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 python \u0438\u043b\u0438 \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f)<\/p>\n<\/li>\n<li>\n<p>platform &#8212; \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438<\/p>\n<\/li>\n<\/ul>\n<p>\u0422.\u0435. \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0430\u043a\u0435\u0442 <code>poetry-1.1.14-py2.py3-none-any.whl<\/code> \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0434\u043b\u044f python2, \u0438 \u0434\u043b\u044f python3, \u043f\u0440\u0438\u0447\u0451\u043c \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u0410 \u0432\u043e\u0442 <code>cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl<\/code> \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 CPython 3.9 \u043f\u043e\u0434 Linux x86_64 \u0441 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438. \u041e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 <code>manylinux_2_17_x86_64<\/code> &#8212; \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b glibc \u0432\u0435\u0440\u0441\u0438\u0438 2.17 \u043f\u043e\u0434 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 x86_64. \u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442! \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0434 alpine \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 &#8212; <code>cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl<\/code>. \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u043e\u043d musl \u0432\u0435\u0440\u0441\u0438\u0438 1.1 \u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 manylinux. \u0422.\u0435. \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u0430\u0447\u0430\u043d\u044b \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0432\u044b. \u0425\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 <a href=\"https:\/\/realpython.com\/python-wheels\/\" rel=\"noopener noreferrer nofollow\">realpython<\/a>.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 uvloop \u043f\u043e\u0434 alpine \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 &#8212; <a href=\"https:\/\/pypi.org\/project\/uvloop\/0.14.0\/#files\" rel=\"noopener noreferrer nofollow\">wheel \u043f\u043e\u0434 alpine \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442 \u043d\u0430 pypi<\/a>. \u0414\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u043e\u0447\u0438\u043d\u0438\u043b\u0438. \u0422.\u0435. \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0430\u043a\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0447\u0430\u043d \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0438 \u0441 psycopg2-binary.<\/p>\n<p>\u041d\u043e \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a pydantic-1.9.1. \u042d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d \u043f\u043e\u0434 <a href=\"https:\/\/pypi.org\/project\/pydantic\/1.9.1\/#files\" rel=\"noopener noreferrer nofollow\">\u0432\u0441\u0451, \u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e<\/a>. \u0418 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u043c pip \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code>\u279c  ~ docker run -it python:3.9-alpine3.13 sh \/ # pip install pydantic==1.9.1 Collecting pydantic==1.9.1   Downloading pydantic-1.9.1-cp39-cp39-musllinux_1_1_x86_64.whl (12.5 MB) |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 12.5 MB 2.1 MB\/s Collecting typing-extensions>=3.7.4.3   Downloading typing_extensions-4.4.0-py3-none-any.whl (26 kB) Installing collected packages: typing-extensions, pydantic Successfully installed pydantic-1.9.1 typing-extensions-4.4.0  \/ # du -d 1 -h \/usr\/local\/lib\/python3.9\/site-packages\/ 72.0K \/usr\/local\/lib\/python3.9\/site-packages\/__pycache__ 49.5M \/usr\/local\/lib\/python3.9\/site-packages\/pydantic ...<\/code><\/pre>\n<h2>\u0411\u0430\u0433\u0438 \u0432\u0441\u044e\u0434\u0443<\/h2>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043a\u0443\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b poetry. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u043d\u0451\u043c&#8230;<\/p>\n<pre><code># poetry add pydantic@1.9.1 Updating dependencies Resolving dependencies... (1.2s) Writing lock file Package operations: 2 installs, 0 updates, 0 removals   \u2022 Installing typing-extensions (4.4.0)   \u2022 Installing pydantic (1.9.1)  # du -d 1 -h \/root\/.cache\/pypoetry\/virtualenvs\/-il7asoJj-py3.9\/lib\/python3.9\/site-packages\/ 1.7M  \/root\/.cache\/pypoetry\/virtualenvs\/-il7asoJj-py3.9\/lib\/python3.9\/site-packages\/pkg_resources 876.0K  \/root\/.cache\/pypoetry\/virtualenvs\/-il7asoJj-py3.9\/lib\/python3.9\/site-packages\/pydantic ...<\/code><\/pre>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e! \u041a \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 <a href=\"https:\/\/github.com\/python-poetry\/poetry\/issues\/5225\" rel=\"noopener noreferrer nofollow\">\u0443\u0436\u0435 \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u043b\u0438<\/a> \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 1.2.0. \u0417\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u043e\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e poetry \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0430\u043a\u0435\u0442\u044b \u0441 \u0442\u0435\u0433\u043e\u043c musllinux_1_1_x86_64 \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432. \u0410 \u0443 pydantic \u0432 setup.py:<\/p>\n<pre><code class=\"python\">if not any(arg in sys.argv for arg in ['clean', 'check']) and 'SKIP_CYTHON' not in os.environ:     try:         from Cython.Build import cythonize     except ImportError:         pass     else:         # For cython test coverage install with `make build-trace`         compiler_directives = {}         if 'CYTHON_TRACE' in sys.argv:             compiler_directives['linetrace'] = True         # Set CFLAG to all optimizations (-O3)         # Any additional CFLAGS will be appended. Only the last optimization flag will have effect         os.environ['CFLAGS'] = '-O3 ' + os.environ.get('CFLAGS', '')         ext_modules = cythonize('pydantic\/*.py', exclude=['pydantic\/generics.py'], \u2026)  setup(     \u2026 <\/code><\/pre>\n<p>\u0422.\u0435. \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Cython, \u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f &#8212; \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 python. \u0414\u0430-\u0434\u0430, python-\u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. \u041f\u0440\u0430\u0432\u0434\u0430, \u043d\u0435 \u043b\u044e\u0431\u043e\u0439, \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0441\u0435\u0442\u0430\u043f alpine + poetry + FastAPI, \u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u0412\u0435\u0440\u043d\u0435\u0435, \u0434\u0438\u043a\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c. \u0414\u0430, \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0443\u0436\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0437\u044f\u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 python:3.x-slim, \u0432\u044b \u0431\u044b \u043e \u043d\u0435\u0439 \u0438 \u043d\u0435 \u0443\u0437\u043d\u0430\u043b\u0438, \u0442.\u043a. \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u0427\u0430\u0441\u0442\u043e \u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043c docker-\u043e\u0431\u0440\u0430\u0437 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0443\u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e\u0441\u044c?<\/p>\n<h2>\u0412\u0437\u0440\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u0435\u043f\u0440\u043e\u0434\u0435<\/h2>\n<p>\u0421\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u0435\u043f\u0440\u043e\u0434\u0435. \u0411\u0430\u0433 \u0431\u044b\u043b \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 aiohttp==3.6.2 \u0438 python==3.7. \u0414\u0430, \u0434\u0430\u0432\u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e, \u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 &#8212; \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434 alpine \u0438 debian \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u043b\u043e\u0441\u044c. \u041e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0443\u043a\u0438 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \\r\\n \u043a\u0430\u043a \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443, \u0430 \u0447\u0435\u0440\u0435\u0437 \\n. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u043c\u0435\u043b\u043e\u0447\u044c, \u043d\u043e:<\/p>\n<pre><code>\u279c  ~ docker run --rm --net=host tyvik\/py-alpine [] &lt;html>&lt;body>&lt;h1>hi!&lt;\/h1>&lt;\/body>&lt;\/html>  \u279c  ~ docker run --rm --net=host tyvik\/py-debian ['uid', 'session'] &lt;html>&lt;body>&lt;h1>hi!&lt;\/h1>&lt;\/body>&lt;\/html><\/code><\/pre>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0441 <a href=\"https:\/\/github.com\/TyVik\/docker-internals\/tree\/master\/aiohttp\" rel=\"noopener noreferrer nofollow\">github<\/a>. \u0411\u0430\u0433 \u043f\u0440\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0440\u0430\u0437\u043d\u044b\u0439 \u043a\u043e\u0434. \u041f\u043e\u0434 debian \u043a\u0443\u043a\u0438 \u043f\u0430\u0440\u0441\u0438\u043b\u0438\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0435; \u043f\u043e\u0434 alpine \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0444\u043e\u043b\u0431\u0435\u043a-\u043a\u043e\u0434 \u043d\u0430 python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0430\u0440\u0441\u0438\u043b \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u043e\u0439. \u0421\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 pypi \u043f\u0440\u043e\u043d\u0438\u043a \u0444\u0430\u0439\u043b <a href=\"https:\/\/pypi.org\/project\/aiohttp\/3.6.2\/#files\" rel=\"noopener noreferrer nofollow\">aiohttp-3.6.2-py3-none-any.whl<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u0432\u0441\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043a\u0430\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u043e\u0434 alpine. \u0422\u0430\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e python \u043a\u043e\u0434. \u041f\u043e\u0434 debian \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0434\u0440\u0443\u0433\u043e\u0439 &#8212; aiohttp-3.6.2-cp37-cp37m-manylinux1_x86_64.whl \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u0430, \u0431\u0430\u0433\u0438 &#8212; \u0441 \u043a\u0435\u043c \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442. \u041d\u043e \u044f \u0445\u043e\u0447\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u041d\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430. \u0418 \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0434\u0435\u0431\u0430\u0433 Dockerfile \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435. \u0425\u0443\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435, \u0438\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u0443\u0437\u043d\u0430\u0451\u0442\u0435, \u0447\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e. \u0418 \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u0435\u043d\u043d\u044b\u0435 80Mb \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u043c\u043e\u0440\u043e\u0447\u0435\u043a?<\/p>\n<p>Alpine \u043d\u0435 \u043f\u043b\u043e\u0445\u043e\u0439 \u0438 \u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0439. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u0423 \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0430\u0440\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043a\u0440\u0443\u0442\u044f\u0442\u0441\u044f \u043d\u0430 \u043d\u0451\u043c, \u043d\u043e \u043e\u043d\u0438 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435. \u0422\u0430\u043c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e 2 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0441\u0440\u0430\u0437\u0443 \u0431\u0440\u043e\u0441\u0438\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432). \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u043e: \u0432 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0431\u0435\u0440\u0438 debian; alpine &#8212; \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u0435\u0448\u044c \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0448\u044c.<\/p>\n<p>\u041f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0437\u0430 \u043a\u043b\u0438\u043a\u0431\u0435\u0439\u0442\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a. \u041c\u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043a \u0432\u044b\u0431\u043e\u0440\u0443 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043a\u0430\u043a \u043f\u043b\u044e\u0441\u044b, \u0442\u0430\u043a \u0438 \u043c\u0438\u043d\u0443\u0441\u044b.<\/p>\n<h2>\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043d\u0435-\u043f\u0438\u0442\u043e\u043d\u0438\u0441\u0442\u0430\u043c<\/h2>\n<p>\u042f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0444\u0440\u043e\u043d\u0442\u044b, \u0433\u043e\u0448\u043d\u0438\u043a\u0438 \u0438 \u0434\u0440. \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 alpine \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430. \u0422\u0430\u043c \u044d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u043c\u0435\u0441\u0442\u043d\u043e, \u0442.\u043a. \u0441\u043b\u0430\u0431\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u0418 \u044f \u0441\u0430\u043c \u0431\u0435\u0440\u0443 nginx:alpine, postgres:alpine, redis:alpine \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432&#8230; \u0412 python-\u043c\u0438\u0440\u0435 \u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e musl. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <\/p>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/707858\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f docker-\u043e\u0431\u0440\u0430\u0437 \u043f\u0440\u0438 \u0435\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438?<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             37.84%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0438 \u043b\u0430\u0434\u043d\u043e<\/span> <span class=\"tm-article-poll__answer-votes\">             14           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:37.84%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             8.11%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0435\u043d\u044c\u0448\u0435 500Mb \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e<\/span> <span class=\"tm-article-poll__answer-votes\">             3           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:8.11%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             13.51%           <\/span> <span class=\"tm-article-poll__answer-label\">2-step \u0431\u0438\u043b\u0434, \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/span> <span class=\"tm-article-poll__answer-votes\">             5           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:13.51%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             40.54%           <\/span> <span class=\"tm-article-poll__answer-label\">\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e \u0438 \u0443\u0434\u0430\u043b\u044f\u044e \u043c\u0443\u0441\u043e\u0440 \u043f\u043e-\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443<\/span> <span class=\"tm-article-poll__answer-votes\">             15           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:40.54%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 37 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 2 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.      <\/div>\n<\/div>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/707858\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0412\u0430\u0448 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f python \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             66.67%           <\/span> <span class=\"tm-article-poll__answer-label\">debian<\/span> <span class=\"tm-article-poll__answer-votes\">             22           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:66.67%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             42.42%           <\/span> <span class=\"tm-article-poll__answer-label\">alpine<\/span> <span class=\"tm-article-poll__answer-votes\">             14           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:42.42%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             9.09%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439<\/span> <span class=\"tm-article-poll__answer-votes\">             3           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:9.09%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 33 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.           \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 5 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.      <\/div>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/707858\/\"> https:\/\/habr.com\/ru\/post\/707858\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0435\u0433\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430 PyCon <a href=\"https:\/\/www.youtube.com\/watch?v=KKAtq2Yx-l8\" rel=\"noopener noreferrer nofollow\">&#171;\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f Python \u0431\u0435\u0437 \u0431\u043e\u043b\u0438&#187;<\/a>. \u041d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0441\u044c \u0441\u043e \u0441\u043f\u043e\u0440\u0430\u043c\u0438 \u043a\u0430\u043a\u043e\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432: alpine \u0438\u043b\u0438 debian. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0435\u0441\u0442\u044c \u0438 \u0443 \u0442\u043e\u0439, \u0438 \u0443 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043d\u043e \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434\u043e\u0435\u043b\u043e, \u0447\u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0430\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 &#171;\u0412 \u043d\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u0438\u043a\u043e\u043c\u0443, \u0434\u0430\u0436\u0435 \u0441\u0435\u0431\u0435. \u041d\u043e \u043c\u043d\u0435 &#8212; \u043c\u043e\u0436\u043d\u043e.&#187; (\u0441)<\/p>\n<figure class=\"full-width\"><figcaption>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 dive<\/figcaption><\/figure>\n<h2>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b alpine \u0438 debian<\/h2>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 python-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u0434 alpine, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442.<\/p>\n<p><a href=\"https:\/\/github.com\/debuerreotype\/docker-debian-artifacts\/blob\/b6a83caf7b05e44f249ecfc0eb2ccca8cc164c1c\/bullseye\/Dockerfile\" rel=\"noopener noreferrer nofollow\">Debian<\/a>:<\/p>\n<pre><code>FROM scratch ADD rootfs.tar.xz \/ CMD [\"bash\"]<\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/alpinelinux\/docker-alpine\/blob\/a791ed3b042cb15f4dda594dd2fb088dcb725542\/x86_64\/Dockerfile\" rel=\"noopener noreferrer nofollow\">Alpine<\/a><\/p>\n<pre><code>FROM scratch ADD alpine-minirootfs-3.17.0-x86_64.tar.gz \/ CMD [\"\/bin\/sh\"]<\/code><\/pre>\n<p>\u0422.\u0435. \u0447\u0442\u043e alpine, \u0447\u0442\u043e debian, \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u043f\u043e \u0441\u0443\u0442\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u043a\u0443\u0434\u0430 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u041a\u0441\u0442\u0430\u0442\u0438, alpine-minirootfs-3.17.0-x86_64.tar.gz \u0432\u0435\u0441\u0438\u0442 \u0432\u0441\u0435\u0433\u043e 3 Mb, \u0430 rootfs.tar.xz \u0430\u0436 31 Mb. \u0412 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 6.7 Mb \u0438 122 Mb \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0412\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438? \u0417\u0430 \u0441\u0447\u0451\u0442 \u0447\u0435\u0433\u043e? \u0421\u0440\u0430\u0432\u043d\u0438\u043c 2 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430:<\/p>\n<figure class=\"full-width\"><figcaption>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043a\u0430\u043a \u043c\u043e\u0433\u0443<\/figcaption><\/figure>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u0435\u0437\u0434\u0435. \u041d\u043e \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 usr &#8212; \u0430\u0436 100 Mb! \u0417\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u043d\u0435\u0433\u043e (\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e \u0432\u0441\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 100k \u0438\u043d\u0430\u0447\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439):<\/p>\n<pre><code class=\"bash\">\u279c  \/opt\/debain\/usr du -h -d 2 -t 100k . 14M   .\/bin 532K  .\/share\/info 31M   .\/share\/locale 168K  .\/share\/keyrings 128K  .\/share\/gcc 5,3M  .\/share\/man 13M   .\/share\/doc 264K  .\/share\/common-licenses 536K  .\/share\/perl5 344K  .\/share\/bash-completion 124K  .\/share\/lintian 5,0M  .\/share\/zoneinfo 56M   .\/share 1,9M  .\/lib\/locale 1,1M  .\/lib\/apt 36M   .\/lib\/x86_64-linux-gnu 39M   .\/lib 2,2M  .\/sbin 111M  .<\/code><\/pre>\n<p>\u0422.\u0435. \u043f\u043e\u0433\u043e\u0434\u0438\u0442\u0435 &#8212; 31 Mb \u043f\u043e\u0434 \u043b\u043e\u043a\u0430\u043b\u0438? 13 Mb &#8212; \u043f\u043e\u0434 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e? \u0442\u0430\u043c \u0435\u0449\u0451 gconv \u043d\u0430 7.6 Mb? \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 debian, \u0432\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043c \u043c\u0435\u0441\u0442\u043e \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435?! \u041a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u043d\u0443\u0436\u0435\u043d man \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430? \u041b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432 \/bin \u0438 \/sbin \u0435\u0441\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0433\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u0434\u043a\u043e (\u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430): lsblk, df, debugfs, swapon\/swapoff&#8230; \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043c\u0443\u0441\u043e\u0440, \u043d\u043e \u043a\u0442\u043e \u044f \u0442\u0430\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u043f\u043e\u0440\u0438\u0442\u044c \u0441 \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0436\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u043d\u0435 \u0434\u043e 7 Mb, \u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0432 2 \u0440\u0430\u0437\u0430 &#8212; \u0434\u043e 50 Mb. \u041d\u043e \u0432\u0441\u0451 \u044d\u0442\u043e, \u043a\u0430\u043a \u043d\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043c\u0435\u043b\u043e\u0447\u0438. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 alpine \u043e\u0442 debian \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430\u0445. \u0415\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \/bin, \u0442\u043e \u0432 debian \u043b\u0435\u0436\u0430\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0443 alpine \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \/bin\/busybox. \u0418 \u0442\u0443\u0442 \u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 &#171;\u0430 \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 alpine linux?&#187;.<\/p>\n<h2>\u0420\u0435\u043c\u0430\u0440\u043a\u0430 \u043f\u0440\u043e alpine<\/h2>\n<p>&#171;Small. Simple. Secure. Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.&#187; &#8212; \u0446\u0438\u0442\u0430\u0442\u0430 \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u0442\u044c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430. \u041f\u0440\u043e\u0435\u043a\u0442, \u043a\u0441\u0442\u0430\u0442\u0438, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u0440\u044b\u0439 &#8212; \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 2005 \u0433\u043e\u0434\u0430, \u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u043b \u0443\u043f\u043e\u0440 \u043d\u0430 \u043d\u0435\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0438 \u043e\u0442\u0441\u0435\u043a\u0430\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u043d\u0435\u0433\u043e. \u0422.\u0435. \u044d\u0442\u043e \u0431\u044b\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 linux \u043d\u043e \u0431\u0435\u0437 systemd (\u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430 openrc), \u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c extlinux, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c apk \u0438 busybox \u043a\u0430\u043a \u0437\u0430\u043c\u0435\u043d\u0430 GNU coreutils. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0432 \/bin \u0438 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0444\u0430\u0439\u043b \/bin\/busybox.<\/p>\n<p>\u041d\u043e \u0441\u0430\u043c\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 &#8212; GNU libc \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u0443\u044e musl libc. \u041a glibc \u0431\u044b\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0430\u0441\u0447\u0451\u0442 \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/habr.com\/ru\/post\/520920\/\" rel=\"noopener noreferrer nofollow\">isalnum() \u043c\u043e\u0433 \u043a\u0438\u043d\u0443\u0442\u044c \u0441\u0435\u0433\u0444\u043e\u043b\u0442<\/a>. \u0422\u0430\u043a \u0447\u0442\u043e alpine \u0445\u043e\u0440\u043e\u0448\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043f\u043e\u0434 \u0432\u0441\u044f\u043a\u0438\u0439 embedded (\u043f\u043e\u043f\u0440\u0430\u0432\u044c\u0442\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0442\u0430\u043a). \u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0431\u0438\u043d\u0430\u0440\u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b, \u0438 \u043e\u0442\u0441\u044e\u0434\u0430 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0438.<\/p>\n<h2>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0432 \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445<\/h2>\n<p>\u041d\u043e \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a python. \u0421\u043f\u0443\u043b\u0438\u043c 2 \u043e\u0431\u0440\u0430\u0437\u0430, \u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0443\u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430, \u043f\u0440\u0430\u0432\u0434\u0430?<\/p>\n<pre><code>\u279c  \/opt docker images REPOSITORY            TAG               IMAGE ID       CREATED         SIZE python                3.10-slim         dae00c0316e5   12 hours ago    126MB python                3.10-alpine       2527f31628e7   13 days ago     50.1MB<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 django-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0437\u044f\u0442\u044b \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043c\u043e\u0435\u0433\u043e \u043f\u0435\u0442-\u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<pre><code>[tool.poetry.dependencies] python = \"^3.10\" Django = \"~3.2\" django-elasticsearch-dsl = \"^7.2.0\" django-enumfields = \"^2.1.1\" djangorestframework = \"^3.12.4\" django-elasticsearch-dsl-drf = \"^0.22.1\" django-filter = \"^2.4.0\" django-cors-headers = \"^3.7.0\" drf-nested-routers = \"^0.93.4\" gunicorn = \"^20.1.0\"<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code>\u279c  \/opt docker images REPOSITORY              TAG               IMAGE ID       CREATED         SIZE django                  debian            3e9fef9d8b54   2 seconds ago   201MB django                  alpine            2f27ca4a1588   16 seconds ago  125MB python                  3.10-slim         dae00c0316e5   12 hours ago    126MB python                  3.10-alpine       2527f31628e7   13 days ago     50.1MB<\/code><\/pre>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432\u0441\u0451 \u0442\u0430 \u0436\u0435 \u0432 70Mb &#8212; \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e. \u0418 \u0435\u0441\u043b\u0438 \u044d\u043a\u0441\u0442\u0440\u0430\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c docker-\u043e\u0431\u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0438\u0442\u044c ~600Mb, \u0442\u043e \u0442\u0430\u043a \u043b\u0438 \u0432\u0430\u0436\u043d\u044b \u044d\u0442\u0438 70Mb?<\/p>\n<p>Ok, \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c django-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u044f \u0432\u043e\u0437\u044c\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0432\u043e\u0439 \u043f\u0435\u0442-\u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 FastAPI \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438:<\/p>\n<pre><code>[tool.poetry.dependencies] python = \"^3.8\" pycairo = \"^1.19.1\" fastapi = \"^0.54.1\" uvicorn = \"^0.11.3\" aiofiles = \"^0.5.0\" SQLAlchemy = {extras = [\"asyncio\"], version = \"^1.4.29\"} alembic = \"^1.7.5\" asyncpg = \"^0.25.0\" elasticsearch = {extras = [\"async\"], version = \"^7.16.2\"}<\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u043d\u044e \u0432 Dockerfile <code>python:3.8-slim<\/code> \u043d\u0430 <code>python:3.8-alpine<\/code> \u0438\u0438\u0438\u0438&#8230;<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u043e\u0441\u044c\u0431\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440<\/figcaption><\/figure>\n<p>\u041b\u0430\u0434\u043d\u043e, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044e gcc, \u0445\u043e\u0442\u044f \u043f\u043e\u0434 debian \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c&#8230;<\/p>\n<figure class=\"full-width\"><figcaption>\u0418 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a \u043d\u0435\u043c\u0443<\/figcaption><\/figure>\n<p>ok, \u0441\u0430\u043c \u0434\u0443\u0440\u0430\u043a &#8212; \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u0431\u044b\u043b. \u041a \u0441\u043b\u043e\u0432\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u044f \u043e\u0431\u0435\u0440\u043d\u0443\u043b \u0432<\/p>\n<pre><code>RUN apk add g++ musl-dev --virtual dev \\   &amp;&amp; poetry config virtualenvs.create false \\   ...   &amp;&amp; apk del dev<\/code><\/pre>\n<p>\u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0441\u0442\u043d\u0435\u0435 \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u043d\u044f \u0436\u0434\u0430\u043b\u043e:<\/p>\n<figure class=\"full-width\"><figcaption>\u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0448\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/figcaption><\/figure>\n<p>`Something went wrong bootstrapping makefile fragments` \u0432\u0441\u0435\u043b\u0438\u043b \u0432 \u043c\u0435\u043d\u044f \u0443\u0436\u0430\u0441. \u041a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0432 Makefile \u043c\u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0443\u043b\u044b\u0431\u0430\u043b\u043e\u0441\u044c, \u0430 uvicorn \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c. \u0422\u0430\u043a \u0447\u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e. \u041e\u0431\u0440\u0430\u0437 \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043d\u043e \u043e\u0441\u0430\u0434\u043e\u0447\u0435\u043a-\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u0441\u044f&#8230; \u041a\u0441\u0442\u0430\u0442\u0438, \u0438\u0437-\u0437\u0430 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0439, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0432 2 \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u043e\u0434 python:3.8-slim. \u041e\u043d\u043e \u0438 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e? \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0437\u0436\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0441\u043e\u0431\u0440\u0430\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<pre><code>\u279c  \/opt docker images REPOSITORY                TAG               IMAGE ID       CREATED         SIZE fastapi                   debian            b939da63315f   14 minutes ago  244MB fastapi                   alpine            6f210c82554e   14 minutes ago  111MB<\/code><\/pre>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432 2 \u0440\u0430\u0437\u0430! \u0421\u0435\u0440\u044c\u0451\u0437\u043d\u043e? \u0427\u0443\u0432\u0441\u0442\u0432\u0443\u044e \u0432 \u044d\u0442\u043e\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u043e\u0434\u0432\u043e\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 (\u043f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0437\u0430 \u0441\u0442\u0430\u044e \u0448\u0430\u043a\u0430\u043b\u043e\u0432):<\/p>\n<figure class=\"full-width\"><figcaption>\u0421\u043a\u043b\u0435\u0438\u0432\u0430\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043a\u0430\u043a \u043c\u043e\u0433\u0443<\/figcaption><\/figure>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 pydantic. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 2 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 &#8212; \u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440, \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u0447\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a! \u0418\u0434\u0451\u043c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 debian \u0442\u0430\u043c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u0430 \u043f\u043e\u0434 alpine &#8212; python \u043a\u043e\u0434. \u0422.\u0435. \u043f\u043e\u0433\u043e\u0434\u0438\u0442\u0435 &#8212; \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 pydantic \u043f\u043e\u0434 alpine \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u043e\u0434 debain. \u041d\u043e, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u0431\u044b\u0442\u044c? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443.<\/p>\n<h2>\u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 python \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/h2>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 python \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 wheel. \u0415\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 (.tar.gz), \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f setup.py, \u043f\u043e\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d. \u0422\u0430\u043a \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u0432 pypi \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u043d\u043e \u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 CI\/CD wheel-\u043f\u0430\u043a\u0435\u0442\u044b. \u0411\u043b\u0430\u0433\u043e, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432 2 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 (\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Yandex Disk):<\/p>\n<pre><code>$ pip wheel --no-deps . -w dist Processing \/opt\/app\/YaDiskClient   Preparing metadata (setup.py) ... done Building wheels for collected packages: YaDiskClient   Building wheel for YaDiskClient (setup.py) ... done   Created wheel for YaDiskClient: filename=YaDiskClient-0.5.1-py3-none-any.whl size=5238 Successfully built YaDiskClient  $ twine upload dist\/* Uploading distributions to https:\/\/upload.pypi.org\/legacy\/ Uploading YaDiskClient-0.5.1-py3-none-any.whl 100% \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 11.8\/11.8 kB \u2022 00:00 \u2022 9.3 MB\/s View at: https:\/\/pypi.org\/project\/YaDiskClient\/0.5.1\/<\/code><\/pre>\n<p>\u0415\u0449\u0451 \u043f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u0431 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041e\u043f\u0438\u0441\u0430\u043d \u043e\u043d \u0432 PEP 440 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e: <code>{dist}-{version}-{python}-{abi}-{platform}.whl<\/code> (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0430\u043c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439, \u043d\u043e \u043e\u043d\u0438 \u043d\u0430\u043c \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b). \u0427\u0442\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<ul>\n<li>\n<p>dist &#8212; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>version &#8212; \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 (\u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f semver)<\/p>\n<\/li>\n<li>\n<p>python &#8212; \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e python<\/p>\n<\/li>\n<li>\n<p>abi &#8212; \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u043e\u0431\u044b\u0447\u043d\u043e abi3, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 python \u0438\u043b\u0438 \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f)<\/p>\n<\/li>\n<li>\n<p>platform &#8212; \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438<\/p>\n<\/li>\n<\/ul>\n<p>\u0422.\u0435. \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0430\u043a\u0435\u0442 <code>poetry-1.1.14-py2.py3-none-any.whl<\/code> \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0434\u043b\u044f python2, \u0438 \u0434\u043b\u044f python3, \u043f\u0440\u0438\u0447\u0451\u043c \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u0410 \u0432\u043e\u0442 <code>cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl<\/code> \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 CPython 3.9 \u043f\u043e\u0434 Linux x86_64 \u0441 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438. \u041e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 <code>manylinux_2_17_x86_64<\/code> &#8212; \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b glibc \u0432\u0435\u0440\u0441\u0438\u0438 2.17 \u043f\u043e\u0434 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 x86_64. \u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442! \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0434 alpine \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 &#8212; <code>cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl<\/code>. \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u043e\u043d musl \u0432\u0435\u0440\u0441\u0438\u0438 1.1 \u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u043e \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 manylinux. \u0422.\u0435. \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u0430\u0447\u0430\u043d\u044b \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0432\u044b. \u0425\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 <a href=\"https:\/\/realpython.com\/python-wheels\/\" rel=\"noopener noreferrer nofollow\">realpython<\/a>.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 uvloop \u043f\u043e\u0434 alpine \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 &#8212; <a href=\"https:\/\/pypi.org\/project\/uvloop\/0.14.0\/#files\" rel=\"noopener noreferrer nofollow\">wheel \u043f\u043e\u0434 alpine \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442 \u043d\u0430 pypi<\/a>. \u0414\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u043e\u0447\u0438\u043d\u0438\u043b\u0438. \u0422.\u0435. \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0430\u043a\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0447\u0430\u043d \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0438 \u0441 psycopg2-binary.<\/p>\n<p>\u041d\u043e \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a pydantic-1.9.1. \u042d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d \u043f\u043e\u0434 <a href=\"https:\/\/pypi.org\/project\/pydantic\/1.9.1\/#files\" rel=\"noopener noreferrer nofollow\">\u0432\u0441\u0451, \u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e<\/a>. \u0418 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u043c pip \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code>\u279c  ~ docker run -it python:3.9-alpine3.13 sh \/ # pip install pydantic==1.9.1 Collecting pydantic==1.9.1   Downloading pydantic-1.9.1-cp39-cp39-musllinux_1_1_x86_64.whl (12.5 MB)<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-343212","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/343212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=343212"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/343212\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=343212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=343212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=343212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}