- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以让 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/
这个问题在这里已经有了答案: Pip install from pypi works, but from testpypi fails (cannot find requirements) (2 个
我有一个 Python 库 ( https://github.com/jcrozum/PyStableMotifs ),我想在 PyPI 上发布。它依赖于另一个我无法控制的库 ( https://gi
我正在使用 setuptools 创建一个快速 setup.py 脚本来为用户安装依赖项。该软件包只需要 numpy 和 matlibplot。所以代码看起来像这样: from setuptools
我使用 python bdist_rpm 创建了一个新的 RPM。通常 python setup.py install 会安装 python 依赖项,如 websocket-client 或任何其他包
要制作一个python包,在setup.py中,我有以下内容: setup( name='TowelStuff', version='0.1.0', author='J. Ra
我在这里的问题可能看起来很幼稚,但我从未在网络资源上找到任何关于它的线索。 问题是,关于 install_requires 函数或 setup() 文件的 setup.cfg 参数, 提及使用的每个包
我有多个共享内部库,许多存储库都依赖这些库。现在,这些库位于同一个 git 存储库中,并在需要时被子模块到每个应用程序中。在构建期间,我将 pip 安装库。我面临的问题是这些内部库也相互依赖,但由于它
这是我的代码的一部分:(setup.py) args = { 'name' : 'ModernGL.PyQt5', 'version' : Version, 'descript
我需要添加 rjsmin通过 install_require 添加到我的依赖项在 setup.py 中。 rjsmin提供了一种使用 --without-c-extensions 禁用 c 扩展的方法
在上传之前,我在包目录中使用 pip3 install -e . 测试我的 PyPI 包。 依赖于pillow(在代码中导入PIL) 当我使用已安装的枕头进行测试时,它起作用了。 但是,我卸载了 pi
我有一个适用于 python 2 和 python 3 的模块。在 Python=3.2。 类似: install_requires=[ "threadpool >= 1.2.7 if py
我无法使用 setup.py 安装本地软件包 这是项目结构: my-project/ lib/ local1/ local1.1.0.whl index.
我需要使用 pip install SomePackage.tar.gz 安装一个 python 包。在此包的 setup.py 中,install_requires 下列出的一些库已成为 Pytho
我写了一个依赖openpyxl的python模块。我希望使用 setuptools 将 openpxyl 作为依赖项自动安装。我读到正确的方法是在 setup.py 脚本中包含以下内容: setup(
我想制作一个依赖于特定版本范围的包,例如>= 0.5.0, , =, == or !=, followed by a version identifier. 文档给出了一个这样的简单示例: docut
我有一个如下所示的 setup.py: from setuptools import setup from subprocess import call from setuptools.command
是否可以让 setuptools 的 extras_require 覆盖 install_requires 中的要求集?我的猜测是不,因为 extras_require 是一个 ...dictiona
我注意到一些 python 项目在所需模块列表中包含 setuptools。没有它,我的代码可以正常安装和执行。 我可能错了,但我认为 install_requires 列表的目的是指定安装后执行所需
我已经使用 pip 安装 PIL。安装时需要两个额外的参数。所以安装命令看起来像这样。 pip install PIL --allow-external PIL --allow-unverified
我正在创建一个 setup.py依赖于私有(private) GitHub 存储库的项目的文件。文件的相关部分如下所示: from setuptools import setup setup(name
我是一名优秀的程序员,十分优秀!