Построение и исследования графа python3-зависимостей в репозитории Sisyphus (Данила Загайнов, OSSDEVCONF-2023) — различия между версиями

Материал из 0x1.tv

(Thesis)
 
(не показаны 2 промежуточные версии этого же участника)
;{{SpeakerInfo}}: {{Speaker|Данила Загайнов}}
<blockquote>
В работе рассматриваются зависимости и provides-ы python3-пакетов, а также выделение подпакета из исходного
python3-пакета.
</blockquote>

{{VideoSection}}

{{vimeoembed|959544562|800|450}}
{{youtubelink|}}
|VJBCn9VE6CM}}
{{SlidesSection}}
[[File:Построение и исследования графа python3-зависимостей в репозитории Sisyphus (Данила Загайнов, OSSDEVCONF-2023).pdf|left|page=-|300px]]

{{----}}

== Thesis ==
=== py3dephell ===

Данный пакет предоставляет модули для работы с зависимостями и <tt>provides</tt>{}-ами <tt>python3</tt>-пакетов.

Его компонент <tt>py3prov </tt>на основе переданных имён файлов и каталогов определяет <tt>provides</tt>-ы рассматриваемого пакета с учётом <tt>.pth </tt>файлов и [https://docs.python.org/3/library/site.html корректности получаемых имен].

Для выявления же зависимостей используется <tt>py3req</tt>. 
Данный модуль читает <tt>AST</tt>-дерево переданного скрипта, написанного на <tt>python3</tt>, или же парсит заголовок <tt>ELF</tt>-файла, 
[https://docs.python.org/3/library/ast.html для выявления соответствующих зависимостей]. 

Текущая версия на 13:57, 16 июня 2024

Докладчик
Данила Загайнов

В работе рассматриваются зависимости и provides-ы python3-пакетов, а также выделение подпакета из исходного python3-пакета.

Видео

on youtube

Презентация

Thesis

py3dephell

Данный пакет предоставляет модули для работы с зависимостями и provides-ами python3-пакетов.

Его компонент py3prov на основе переданных имён файлов и каталогов определяет provides-ы рассматриваемого пакета с учётом .pth файлов и корректности получаемых имен.

Для выявления же зависимостей используется py3req. Данный модуль читает AST-дерево переданного скрипта, написанного на python3, или же парсит заголовок ELF-файла, для выявления соответствующих зависимостей.

Для определения self-provides py3req использует py3prov.

Компоненты rpm-build-python3 уже используют данный пакет для формирования зависимостей и provides-ов rpm-пакетов в репозитории Sisyphus.

В ходе внедрения py3dephell было выявлено множество (свыше 400) ложных provides-ов у rpm-пакетов, а также ошибки в упаковке ряда пакетов, вследствие чего, например, порождались зависимости между основным пакетом и подпакетом с тестами.

Также данные модули могут автоматически формировать requirements.txt, пригодного для использования утилитой pip.

В то же время была рассмотрена задача вынесения нежелательных зависимостей из пакета. Предполагается, что пользователь, задав набор ключевых модулей, сможет выделить из исходного пакета подпакеты, содержащие избыточные зависимости. Примером таких зависимостей могут служить зависимости на тесты, графический интерфейс, сеть и т. д.

Был предложен следующий алгоритм:

  1. Для заданного набора основных модулей формируется подпакет, содержащий их и их зависимости. Если в полученный подпакет попала одна из избыточных зависимостей, то распиливание для заданных наборов невозможно.
  2. Для вынесенных зависимостей строятся подпакеты, содержащие каждую из избыточных зависимостей, и модули, зависящие от них.
  3. Для образовавшихся подпакетов берутся их зависимости, которые ещё не попали ни в 1 из подпакетов. Если несколько подпакетов хотят один и тот же модуль, то его выносят в отдельный подпакет.



Построение и исследования графа python3-зависимостей в репозитории Sisyphus (Данила Загайнов, OSSDEVCONF-2023)!.jpg

Примечания и ссылки