From 879c11675f52b0f234ae917b28d67b764815a272 Mon Sep 17 00:00:00 2001 From: "Andrew J. Hesford" Date: Mon, 7 Jun 2021 23:41:26 -0400 Subject: [PATCH] build-style/python3-{module,pep517}.sh: improve pytest check and run 1. Relying on `python3 -m pytest --help` to test for pytest can fail because the pytest packages's __main__ is still invoked; this can trigger import problems and falsely indicate that pytest is missing. A simpler test is to just confirm that pytest is importable. If so, the interpreter returns 0. Otherwise, an ImportError is thrown and the interpreter will return 1. 2. Many templates require a custom do_check just to set PYTHONPATH to either a build directory (especially for compiled extensions) or some subdirectory of the source tree. Setting PYTHONPATH automatically to the build directory should drastically reduce the need for custom do_check in py3 templates. --- common/build-style/python3-module.sh | 5 +++-- common/build-style/python3-pep517.sh | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/common/build-style/python3-module.sh b/common/build-style/python3-module.sh index ad5fdff252b3..093bdae8a006 100644 --- a/common/build-style/python3-module.sh +++ b/common/build-style/python3-module.sh @@ -24,8 +24,9 @@ do_build() { } do_check() { - if python3 -m pytest --help >/dev/null 2>&1; then - python3 -m pytest ${make_check_args} ${make_check_target} + if python3 -c 'import pytest' >/dev/null 2>&1; then + PYTHONPATH="$(cd build/lib* && pwd)" \ + python3 -m pytest ${make_check_args} ${make_check_target} else # Fall back to deprecated setup.py test orchestration without pytest if [ -z "$make_check_target" ]; then diff --git a/common/build-style/python3-pep517.sh b/common/build-style/python3-pep517.sh index 4051185a28e6..944f37daf441 100644 --- a/common/build-style/python3-pep517.sh +++ b/common/build-style/python3-pep517.sh @@ -13,8 +13,9 @@ do_build() { } do_check() { - if python3 -m pytest --help >/dev/null 2>&1; then - python3 -m pytest ${make_check_args} ${make_check_target} + if python3 -c 'import pytest' >/dev/null 2>&1; then + PYTHONPATH="$(cd build/lib* && pwd)" \ + python3 -m pytest ${make_check_args} ${make_check_target} else msg_warn "Unable to determine tests for PEP517 Python templates" return 0