-
Notifications
You must be signed in to change notification settings - Fork 373
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add cv2 graphics / headless extras to setup.py #1195
base: main
Are you sure you want to change the base?
Conversation
opencv-python>=4.5.5.64 ; python_version < '4.0' and python_version >= '3.11' # Python 3.11+ | ||
opencv-python>=4.5.4.58 ; python_version < '3.11' and python_version >= '3.10' # Python 3.10 | ||
opencv-python>=3.4.15.55 ; python_version < '3.10' and python_version >= '3.9' # Python 3.9 | ||
opencv-python>=3.4.15.55 ; python_version < '3.9' and python_version >= '3.8' # Python 3.8 | ||
opencv-python>=3.4.15.55 ; python_version < '3.8' and python_version >= '3.7' # Python 3.7 | ||
opencv-python>=3.4.13.47 ; python_version < '3.7' and python_version >= '3.6' # Python 3.6 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @Erotemic , thanks for your contribution. Is it necessary to set the lower limit of opencv-python version according to different python versions?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's a good question. Having it this way allows older Python's to use older versions of the library that aren't available for newer Python's. The benefit of specifying a minimum version for each python is that a minimum working version is know, but older systems are allowed to update to latest.
The downside is that these are a pain to write. But, I have a tool to help write these: xdev
. If you pip install xdev[all]
and run: xdev availpkg opencv-python
you will see something like:
And if the above link dies, the text is:
package_name = 'opencv-python'
abi_tag abi3 cp310 cp36m cp37m cp38 cp39
os win macosx linux win macosx linux win macosx linux win linux win macosx linux linux macosx win linux win macosx linux linux macosx win linux macosx macosx linux win macosx win linux
arch x86_64 x86_64 aarch64 i686 arm64 x86_64 i686 x86_64 arm64 x86_64 x86_64 aarch64 i686 x86_64 x86_64 x86_64 aarch64 i686 i686 x86_64 x86_64 aarch64 i686 arm64 x86_64 x86_64 i686 x86_64 i686 x86_64 aarch64 arm64 x86_64 aarch64 i686 arm64 x86_64 x86_64 i686
pkg_version
3.4.0.14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.1.15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.10.37 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.11.41 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.11.43 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.11.45 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN 1.0 NaN 1.0 NaN 1.0 1.0 1.0
3.4.13.47 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 NaN 1.0 1.0 1.0
3.4.14.51 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN NaN NaN 1.0 1.0 NaN 1.0 NaN 1.0 1.0 NaN 1.0 1.0 1.0 NaN NaN 1.0 NaN 1.0 NaN 1.0 1.0 NaN
3.4.14.53 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 NaN 1.0 1.0 NaN
3.4.15.55 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN
3.4.16.57 NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN NaN NaN 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 NaN 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN
3.4.16.59 NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN
3.4.17.61 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.17.63 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.18.65 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.2.17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.3.18 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.4.19 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.5.20 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.6.27 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.7.28 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.8.29 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
3.4.9.33 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.0.0.21 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.0.1.24 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.1.0.25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.1.1.26 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.1.2.30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.2.0.32 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.2.0.34 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.3.0.36 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.3.0.38 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.4.0.40 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.4.0.42 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.4.0.44 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.4.0.46 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN 1.0 NaN 1.0 NaN 1.0 1.0 1.0
4.5.1.48 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 NaN 1.0 1.0 1.0
4.5.2.52 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 NaN NaN NaN 1.0 1.0 NaN 1.0 NaN 1.0 1.0 NaN 1.0 1.0 1.0 NaN NaN 1.0 NaN 1.0 NaN 1.0 1.0 NaN
4.5.2.54 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 NaN NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 NaN 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 NaN 1.0 1.0 NaN
4.5.3.56 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN
4.5.4.58 NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN
4.5.4.60 NaN NaN NaN NaN NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 NaN
4.5.5.62 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.5.5.64 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.6.0.66 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.7.0.68 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4.7.0.72 1.0 1.0 1.0 1.0 1.0 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
chosen_minmax_for = {
'2.7': {'best': '3.4.0.14', 'max': '4.2.0.32', 'min': '3.4.0.14'},
'3.4': {'best': '3.4.0.14', 'max': '4.1.1.26', 'min': '3.4.0.14'},
'3.5': {'best': '3.4.0.14', 'max': '4.4.0.42', 'min': '3.4.0.14'},
'3.6': {'best': '3.4.0.14', 'max': '4.7.0.72', 'min': '3.4.0.14'},
'3.7': {'best': '3.4.2.17', 'max': '4.3.0.38', 'min': '3.4.10.37'},
'3.8': {'best': '3.4.8.29', 'max': '4.3.0.38', 'min': '3.4.10.37'},
}
opencv-python>=3.4.17.61 ; python_version < '4.0' and python_version >= '3.11' # Python 3.11+
opencv-python>=3.4.16.57 ; python_version < '3.11' and python_version >= '3.10' # Python 3.10
opencv-python>=3.4.11.45 ; python_version < '3.10' and python_version >= '3.9' # Python 3.9
opencv-python>=3.4.8.29 ; python_version < '3.9' and python_version >= '3.8' # Python 3.8
opencv-python>=3.4.2.17 ; python_version < '3.8' and python_version >= '3.7' # Python 3.7
opencv-python>=3.4.0.14 ; python_version < '3.7' and python_version >= '3.6' # Python 3.6
opencv-python>=3.4.0.14 ; python_version < '3.6' and python_version >= '3.5' # Python 3.5
opencv-python>=3.4.0.14 ; python_version < '3.5' and python_version >= '3.4' # Python 3.4
opencv-python>=3.4.0.14 ; python_version < '3.4' and python_version >= '2.7' # Python 2.7
Which shows you a table of which versions of a package are available for which versions of Python (and os / hardware). The final output is a suggestion of minimum versions for existing versions of Python (and a hypothetical 4.0). These aren't always perfect, but I start from here and tweak minimums (see xdev availpkg --help
). This is how I maintain my requirements/*.txt
and I think it has advantages over alternatives.
If you'd like, I can work towards "finishing" the upgrade so you will be able to do things like
pip install mmcv[cv2-graphics]
pip install mmcv[cv2-headless]
pip install mmcv[all-strict,cv2-headless-strict]
pip install mmcv[runtime-strict,cv2-graphics-strict]
The "-strict" variants will have their versions pinned to the minimum, but without that suffix you get the "loose" behavior, which removes the upper bound on the versions (and allows for compatability / identify when another package breaks you).
This PR is related to a similar one for mmcv: open-mmlab/mmcv#2775
I've copy/pasted the body of that PR but
s/mmcv/mmengine/g
Motivation
The mmengine library requires the cv2 module, but there are two flavors of the module that different users may want in different circumstances, either opencv-python or opencv-python-headless. These libraries are incompatible with each other, and if you incorrectly install the wrong one it becomes a pain to clean them up and install the right one.
This PR introduces a way for the user to specify which one of these they want at install time.
Modification
I've added two new files in
requirements
.cv2-headless.txt
andcv2-graphics.txt
which specify reasonable minimum versions of opencv based on the version of Python the user is on. These are registered as newextras_require
options. So the new usage would be either:This means you no longer have to install cv2 before / after mmengine, and you can be sure you have the right one for your use case based on the install command you use. I've been using this construct in kwimage and other cv repos for a while now with good success.
This also makes a modification to the
parse_requirements
function in setup.py. I was the original author of this construct and I figured I would update it to the lastest version I'm using in my cookiecutter repo while I was here. I don't think it matters to parse the new extra reqs, but it does support more cases that could exist in the future. That could be reverted if needbe.Notes
I think to finialize this PR there will need to be documentation modification and maybe this section:
In the setup.py needs to change? Looking for maintainer feedback about this detail.