diff --git a/lisa/_cli_tools/lisa_polars_pkg.py b/lisa/_cli_tools/lisa_polars_pkg.py index 1897771b24e6a175dc7b4b5e405cba43b59ee2fe..ee8a8a189d9793cfad657ac0e7f60ddf1850fb47 100755 --- a/lisa/_cli_tools/lisa_polars_pkg.py +++ b/lisa/_cli_tools/lisa_polars_pkg.py @@ -17,22 +17,46 @@ # limitations under the License. # -from warnings import catch_warnings +import os +import sys +import subprocess +import importlib.metadata -def main(): - with catch_warnings(record=True) as ws: - import polars +def check_polars(): + # Import in a separate process to resist coredumps due to illegal + # instructions (e.g. SSE on old CPUs). + completed = subprocess.run( + [sys.executable, '-c', 'import polars'], + # Resist coredump + check=False, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + env={ + **os.environ, + # Ensure we have warnings enabled. + 'PYTHONWARNINGS': 'always', + } + ) + out = completed.stdout - version = polars.__version__ + # Get the version without importing the package. This avoids coredumps. + version = importlib.metadata.version('polars') - assert ws is not None - w = ' '.join( - str(w.message) - for w in ws - ) - w = w.lower() + out = out.decode().lower().replace('\n', ' ') + old_cpu = 'cpu' in out and 'feature' in out + return (old_cpu, version) - old_cpu = 'cpu' in w and 'feature' in w + +def main(): + try: + importlib.metadata.version('polars-lts-cpu') + except importlib.metadata.PackageNotFoundError: + old_cpu, version = check_polars() + # If we have polars-lts-cpu installed, we assume it is for good reasons + # because we have an old cpu. + else: + old_cpu = True + version = importlib.metadata.version('polars-lts-cpu') if old_cpu: pkg = 'polars-lts-cpu'