Как запускать Python-функцию с её зависимостями — и не засорять окружение проекта
<img src="https://habrastorage.org/getpro/habr/upload_files/4b1/f46/c94/4b1f46c94f181f959219f64a550cc5a7.png" /><p>Полезная внутренняя функция редко остаётся функцией без зависимостей. Сегодня ей понадобился <code>python-dateutil</code>, завтра — конкретная версия NumPy. Когда тот же код нужен во втором проекте, приходится либо менять его lockfile, либо собирать отдельный контейнер, либо превращать десять строк в сервис.</p><p><strong>splime</strong> предлагает ещё один вариант: опубликовать доверенную Python-функцию вместе с точными версиями пакетов и вызывать её по имени. Локальный демон сам собирает окружение и хранит его отдельно от проекта, который будет вызывать функцию. Общая модель была в <a href="https://habr.com/ru/articles/1058256/" rel="noopener nofollow">первой статье</a>, а упаковка функции — в <a href="https://habr.com/ru/articles/1076680/" rel="noopener nofollow">предыдущей части</a>. Этот текст можно читать отдельно.</p><p>Сначала запустим функцию, чья зависимость вообще не установлена у вызывающего кода. Затем посмотрим, откуда берётся venv, почему он кэшируется и когда одной ноде стоит назначить <code>native</code>, <code>venv-subprocess</code> или <code>Docker</code>. Материал рассчитан на macOS и Linux с Python 3.13+; в splime 0.4.9 сборка локальных окружений требует POSIX.</p> <a href="https://habr.com/ru/articles/1077882/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1077882#habracut">Читать далее</a>
