gpt4 book ai didi

python - 可以让 setuptools extras_require 覆盖 install_requires 的要求吗?

转载 作者:行者123 更新时间:2023-11-28 18:08:30 26 4
gpt4 key购买 nike

是否可以让 setuptools 的 extras_require 覆盖 install_requires 中的要求集?我的猜测是不,因为 extras_require 是一个

...dictionary mapping names of “extras” (optional features of your project)...

因为它是“可选的”,所以 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(在这个time 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.

那么我是否可以在 install_requires 中取消限制 NumPy 版本,然后让 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)

最佳答案

答案(经过深思熟虑)是期望的结果是可能的,但不是通过覆盖install_requires,但是在 install_requires 中有一个要求需要所需的库(所以这很 hacky)。为了说明如何使用此 setup.py

from setuptools import setup, find_packages
setup(
...
install_requires = [
'scipy', # scipy requires numpy, and so will get the latest release from PyPI
...
],
extras_require = {
...
'tensorflow':[
'tensorflow>=1.10.0',
'numpy<=1.14.5,>=1.13.3',
'setuptools<=39.1.0',
]
},
...
)

现在

$ pip install .
$ pip freeze | grep numpy
numpy==1.15.1
$ pip freeze | grep scipy
scipy==1.1.0

$ pip freeze | xargs pip uninstall -y
$ pip install .[tensorflow]
$ pip freeze | grep numpy
numpy==1.14.5
$ pip freeze | grep scipy
scipy==1.1.0

关于python - 可以让 setuptools extras_require 覆盖 install_requires 的要求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52192492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com