Python setup.py определяет необязательные подпакеты с необязательными зависимостями
Я знаю, что можно определить необязательные зависимости в setup.py с extra-require
, Теперь я спрашиваю себя, возможно ли также пометить пакеты как необязательные, чтобы вы могли выбрать, какие подпакеты вы хотите установить? Есть ли способ сопоставить необязательные зависимости с необязательными пакетами.
Например, если у меня есть проект под названием проект А и эта структура пакета:
Project
--subPackage 1
--subPackage 2
--subPackage 3
Я хотел бы отметить подпакеты 2 и 3 как необязательные, чтобы эти пакеты не устанавливались по умолчанию. Но если подпакет указан через pip или требование проекта B, он должен быть установлен с зависимостями.
Таким образом, ожидаемое поведение для проекта B должно быть следующим:
setup.py для проекта B:
setup(
name='Project B',
version='0.0.0',
install_requires=["ProjectA"])
в результате устанавливается только Проект 1 с подпакетом 1. Но если я изменю install_requires
линия к install_requires=["ProjectA[Subpackage2]"]
, Проект A устанавливается с подпакетом 1 и 2 с учетом требований к подпакету 1 и 2.
Это там, чтобы создать setup.py для проекта A для архивирования этого поведения?
1 ответ
Вы можете сделать это, разделив пакет на пакеты с именами. В этом случае ваше репо будет выглядеть примерно так:
project-subpackage-a/
setup.py
project/
subpackage_a/
__init__.py
project-subpackage-b/
setup.py
project/
subpackage_b/
__init__.py
Здесь у вас есть два совершенно отдельных пакета со своими собственными
setup.py
конфигурации. Это означает, что вы можете использовать
install_requires
а также
extra_requires
так же, как и с любым другим пакетом.
Однако, в отличие от других пакетов, если вы установите оба пакета с пространством имен отдельно или с помощью требований, они оба могут существовать в одном и том же пространстве имен пакета.
То есть, если вы устанавливаете оба пакета, вы можете затем импортировать их, как если бы они были получены из одного и того же источника:
from project import subpackage_a
from project import subpackage_b
Для получения дополнительной информации о том, как правильно настроить пакеты пространства имен, ознакомьтесь с документацией по python .