Как установить зависимости на основе выбора пользователей во время выполнения в Python? - PullRequest
1 голос
/ 01 июля 2019

Я создал SDK, который использует несколько зависимостей, например, Boto3, Azure-Storage, Google-Cloud-Data-Store и т. Д. Теперь в моем коде я импортирую эти модули динамически, потому что в то время пользователь будет использовать SDK наGCP, Azure или AWS.Поэтому я не хочу устанавливать зависимости, которые он не будет использовать.Вот мои вопросы:

  1. Правильный ли мой подход, следует ли мне установить все зависимости?
  2. Если нет, то как лучше всего установить пакет, чтобы пользователь мог предоставить некоторыеаргумент для менеджера пакетов, чтобы он устанавливал только те зависимости, которые принадлежат среде, в которой он находится.

    Что-то вроде pip install mysdk --env=aws

PS Я узнал, чтоPython поддерживает параметр install_requires в setup.py, где можно использовать переменную python_version, но могу ли я получить доступ к другим переменным env, определенным пользователем как args

1 Ответ

1 голос
/ 01 июля 2019

Вы можете определить необязательные зависимости в вашем setup.py (или setup.cfg) в блоке extras_require.

В случае вашего setup.py файла

setup(
    ...
    extras_require={
        'aws':  ["boto3"],
    }
)

или для setup.cfg файла

[options.extras_require]
aws = 
    boto3

Когда конечный пользователь устанавливает ваш пакет, он может указать дополнительные функции, добавив их с помощью: pip install mysdk[aws]

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

Для получения дополнительной информации, соответствующая документация здесь: https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies

...