Мне трудно понять и реализовать некоторые детали упаковки Python, используя pip
и setuptools
.
Предположим, у меня есть три проекта,A
и B
и C
, каждый из которых является собственным пакетом и размещен в собственном репо кода.Они также зависят друг от друга, то есть A
импортируется B
, а B
импортируется C
.Каждый пакет имеет набор прямых зависимостей (то есть напрямую импортированных других пакетов) и набор косвенных зависимостей (то есть пакетов, импортированных непосредственно зависимыми пакетами).Эти зависимости являются графиком, а не деревом.
Для пакета A
, должен ли setup.py содержать только непосредственно зависимые пакеты?То же самое для пакета B
?Когда я тогда pip install C
заметил, что устанавливается B
, но не A
.Я полагаю, это потому, что A
является косвенной зависимостью для C
.
. Мне не очень нравится идея хранить pip freeze
в каждом пакете (негибкость и конфликты.loom), но кажется, что pip
не разрешает граф зависимостей рекурсивно (см. здесь ).Проект snakebasket
попытался решить эту проблему, но сейчас он устарел;опция dependency-links устарела.
Какой правильный и рекомендуемый способ обработки?
Добавление Я забыл упомянуть, что нет пакетов (A
, B
, C
) доступны через официальное репо PyPi , но живут в частных репозиториях Github.Так, например, B
файл setup.py содержит
install_requires=(
…,
A==1.0.0,
…,
)
dependency_links=[
f"https://{github_token}@github.com/repo/A/archive/v1.0.0.tar.gz#egg=A-1.0.0",
],
, а C
содержит аналогичные настройки для пакета B
.