From e14bc2131251b2889f577986ac7ca11fd5282196 Mon Sep 17 00:00:00 2001 From: Antti Kaihola Date: Sun, 5 Jul 2020 17:28:10 +0300 Subject: [PATCH] Parse dependencies from Python setup.cfg files Fixes #2133 Also discussed here: https://github.community/t/dependency-graph-does-not-support-setup-cfg-for-python/2576 --- python/helpers/lib/parser.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/python/helpers/lib/parser.py b/python/helpers/lib/parser.py index 94eaa94dd61..f7d9fb43900 100644 --- a/python/helpers/lib/parser.py +++ b/python/helpers/lib/parser.py @@ -1,3 +1,4 @@ +from distutils.core import run_setup from itertools import chain import glob import io @@ -90,6 +91,21 @@ def setup(*args, **kwargs): for key in extras_require_dict: for req in extras_require_dict[key]: parse_requirement(req, 'extras_require:{}'.format(key)) + + try: + # Use distutils.core.run_setup() - this will also parse setup.cfg + setup_result = run_setup(directory + "/setup.py", stop_after="init") + except Exception: + # Try with the original exec() method below + pass + else: + setup( + setup_requires=getattr(setup_result, "setup_requires", None), + install_requires=getattr(setup_result, "install_requires", None), + tests_requires=getattr(setup_result, "tests_requires", None), + extras_require=getattr(setup_result, "extras_require", None), + ) + setuptools.setup = setup def noop(*args, **kwargs): @@ -132,7 +148,8 @@ def fake_open(*args, **kwargs): # Run as main (since setup.py is a script) __name__ = '__main__' - # Exec the setup.py - exec(content) in globals(), locals() + # Exec the setup.py if distutils.core.run_setup() above didn't succeed + if not setup_packages: + exec(content) in globals(), locals() return json.dumps({ "result": setup_packages })