Пакеты пространства имен Python - PullRequest
0 голосов
/ 04 мая 2019

Я следую этой инструкции, чтобы создать несколько маленьких (независимых) пакетов Python2 из большого - https://packaging.python.org/guides/packaging-namespace-packages/#pkg-resources-style-namespace-packages

Теперь у меня есть несколько подпрограмм (пакетов) с такой структурой: https://github.com/pypa/sample-namespace-packages/tree/master/pkg_resources

Я могу установить и использовать их независимо, это работает просто отлично. Но поскольку у меня 12 пакетов в одном и том же пространстве имен, я бы хотел установить их, выполнив одну команду (например, pip install). Например. некоторые будущие проекты будут нуждаться в них всех, поэтому я предпочитаю использовать их как (обычный) монолит (одна зависимость), но иногда мне нужен только один из них (поэтому я играю с пространствами имен). поэтому мне нужен файл setup.py в корневом каталоге моего пространства имен, который содержит все подпакеты в install_requires или что? Я не могу понять, как у меня есть возможность установить все мои небольшие пакеты сразу под корневым пространством имен, как в любой обычной структуре проекта (когда мы не разделяем их и вообще не используем пространства имен), но имея вариант установить их отдельно?

1 Ответ

1 голос
/ 20 июня 2019

Это звучит как общая проблема правильного управления зависимостями, которая не связана с вашей функцией общего пространства имен.Для вашей особой проблемы я бы рекомендовал следующее:

install_requires только для абсолютно необходимых зависимостей (тех, которые должны присутствовать или программа не может быть выполнена), поэтому она не подходит для вашего случая.

Лучше использовать директиву extras_require , которая позволяет указывать дополнительные зависимости в определенных случаях.Распространенными дополнениями являются dev - пакеты, необходимые во время разработки, или doc - пакеты, необходимые для создания документов.

Если ваши пакеты, находящиеся в одном и том же пространстве имен, называются nsp1, nsp2 и nsp3, вы можете указатьв любом из ваших пакетов в setup.py:

setup(
    name="Project-A",
    ...
    extras_require={
        'all':  ["nsp1", "nsp2", "nsp3"],
        'set1': ["nsp1", "nsp2"],
    }
)

После этого вы можете установить их с помощью pip3 install nsp1[all] (при условии, что вы расширили setup.py для nsp1) или pip3 install .[all] для локальной установки.

Если какой-либо из ваших «некоторых будущих проектов» нуждается именно в этих зависимостях, вы можете добавить эти дополнения к его зависимостям, например, в его setup.py:

install_requires=['nsp1[all]', …]

Альтернативой может бытьиспользуйте requirement.txt:

nsp1
nsp2
nsp3

и установите их с помощью pip install -rrequirement.txt

...