В настоящее время ни один из пунктов requirement.txt
, ни setuptools не допускают такую конструкцию. Оба требуют от вас указать список требований. Вы можете ограничить версию требования, но это все.
Внутри Python, вы можете справиться с этой ситуацией следующим образом:
try:
import dependency1
def do_it(x):
return dependency1.some_function(x)
except ImportError:
try:
import dependency2
def do_it(x)
return dependency2.another_function(x)
except ImportError:
raise ImportError('You must install either dependency1 or '
+ 'dependecy2!')
Теперь do_it
использует либо dependency1.some_function
или dependency2.another_function
, в зависимости от того, который доступен.
Это все равно оставит вас с проблемой определения ваших требований. Я вижу два варианта:
- Не формально определяют требования в
requirements.txt
или setup.py
, но документ о том, что пользователю необходимо установить один из зависимостей. Этот подход может быть в порядке, если для настройки вашего программного обеспечения в любом случае требуются дополнительные шаги управления (то есть больше, чем только pip install my_tool
).
- Жесткий код вашего предпочтительного требования в
requirements.txt
или setup.py
.
В конце концов, вы должны спросить себя, почему люди могут захотеть использовать одну зависимость по сравнению с другой: мне обычно нечего заботиться о зависимостях библиотек, которые я использую, потому что (дисковое) пространство дешево и (из-за virtualenv), существует небольшой риск несовместимости. Поэтому я бы даже предложил вам подумать о том, чтобы не поддерживать две разные зависимости для одной и той же функциональности.
Интересно. Я не знал, что вы можете использовать такой синтаксис с 'pip'. –