@@ -241,15 +241,23 @@ def get_latest_scipy_python_version():
241241 """
242242 Retrieve the latest Python version that is supported by SciPy
243243 """
244+ python_version = get_latest_pkg_python_version ("scipy" )
245+ return f"<={ python_version } "
246+
247+
248+ def get_latest_pkg_python_version (pkg ):
249+ """
250+ Retrieve the latest Python version that is supported by <pkg>
251+ """
244252 python_versions = []
245- response = _get_pypi_json ("scipy" )
253+ response = _get_pypi_json (pkg )
246254 for classifier in response .get ("info" ).get ("classifiers" ):
247255 if "Python" in classifier :
248256 match = re .search (r"Python\s+\:\:\s+(\d+\.\d+)" , classifier )
249257 if match is not None :
250258 python_versions .append (match .groups ()[0 ])
251259 python_version = sorted (python_versions , key = Version )[- 1 ]
252- return f"<= { python_version } "
260+ return python_version
253261
254262
255263def _get_pypi_json (pkg ):
@@ -496,15 +504,23 @@ def get_all_min_versions(MIN_PYTHON):
496504 default = "min" ,
497505 help = 'Options: ["min", "max", "range", "safe", "latest"]' ,
498506 )
507+ parser .add_argument (
508+ "-pkg" , type = str , default = None , help = "Name of any Python package in PyPI"
509+ )
499510 parser .add_argument ("python_version" , nargs = "*" , default = None )
500511 args = parser .parse_args ()
501512 # Example
502513 # ./versions.py
503- # ./versions.py 3.11
514+ # ./versions.py -pkg ray
515+ # ./versions.py -mode min
504516 # ./versions.py -mode max
517+ # ./versions.py -mode safe
518+ # ./versions.py -mode latest
505519 # /versions.py -mode range 3.10 3.14
506520
507- if args .mode == "min" :
521+ if args .pkg :
522+ print (get_latest_pkg_python_version (args .pkg ))
523+ elif args .mode == "min" :
508524 if len (args .python_version ) == 0 :
509525 args .python_version = None
510526 elif len (args .python_version ) == 1 :
0 commit comments