Возможно ли, чтобы setuptools extras_require
переопределил требование, установленное в install_requires
? Я думаю, нет, поскольку extras_require
является
... словарь, отображающий имена «дополнений» (дополнительные функции вашего проекта) ...
и так, поскольку это «необязательно», тогда install_requires
всегда будет иметь приоритет. Я думал, что спросить на всякий случай, хотя.
Причиной для запроса является следующий вариант использования со следующим примером setup.py
from setuptools import setup, find_packages
setup(
...
install_requires = [
'numpy<=1.14.5,>=1.14.0',
...
],
extras_require = {
...
'tensorflow':[
'tensorflow>=1.10.0',
'numpy<=1.14.5,>=1.13.3',
'setuptools<=39.1.0',
]
},
...
)
У вас есть библиотека, которая поддерживает несколько бэкэндов для вычислений (например, NumPy, TensorFlow, PyTorch), но установленным бэкэндом по умолчанию является просто NumPy, и тогда разные бэкэнды могут быть установлены с помощью разных опций. TensorFlow имеет требование, что
tensorflow 1.10.1 has requirement numpy<=1.14.5,>=1.13.3
но вы не хотите принудительно ограничивать NumPy, если пользователь просто хочет использовать бэкэнд NumPy. Так что в идеале , можно было бы иметь в install_requires
просто numpy>=1.14.0
для пользователей, которые будут делать
pip install .
и затем для пользователей, которым нужен TensorFlow, они просто будут использовать
pip install -e .[tensorflow]
Однако это, конечно, не работает, как будто install_requires
просто имеет numpy>=1.14.0
, тогда установлена последняя версия PyPI NumPy (в настоящее время 1.15.1
), и вы получаете предупреждение во время установки
tensorflow 1.10.1 has requirement numpy<=1.14.5,>=1.13.3, but you'll have numpy 1.15.1 which is incompatible.
Так есть ли в любом случае, что я могу ограничить выпуск NumPy в install_requires
, а затем заставить setuptools проверять и использовать выпуски, указанные в extras_require
, если потребуется?
Для контекста:
$ python --version
Python 3.6.6
$ pip --version
pip 18.0 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
$ easy_install --version
setuptools 40.0.0 from /usr/local/lib/python3.6/site-packages (Python 3.6)