|
| 1 | +import json |
1 | 2 | import logging |
2 | 3 | from pathlib import Path |
3 | 4 |
|
@@ -75,14 +76,28 @@ async def verify_env_readiness( |
75 | 76 |
|
76 | 77 | dependencies = pixi_environment.dependencies + pixi_environment.pypi_dependencies |
77 | 78 | if required_package not in dependencies: |
78 | | - return Failure( |
79 | | - PIXI_KERNEL_NOT_FOUND.format( |
80 | | - kernel_name=kernel_name, |
81 | | - required_package=required_package, |
82 | | - prefix=pixi_environment.prefix, |
83 | | - ) |
| 79 | + # Check transitive dependencies |
| 80 | + returncode, stdout, stderr = await subprocess_exec( |
| 81 | + "pixi", "list", "--json", cwd=cwd, env=env |
84 | 82 | ) |
85 | 83 |
|
| 84 | + logger.info(f"pixi list stderr: {stderr}") |
| 85 | + logger.info(f"pixi list stdout: {stdout}") |
| 86 | + if returncode != 0: |
| 87 | + return Failure(f"Failed to run 'pixi list': {stderr}") |
| 88 | + |
| 89 | + try: |
| 90 | + if required_package not in {dep["name"] for dep in json.loads(stdout)}: |
| 91 | + return Failure( |
| 92 | + PIXI_KERNEL_NOT_FOUND.format( |
| 93 | + kernel_name=kernel_name, |
| 94 | + required_package=required_package, |
| 95 | + prefix=pixi_environment.prefix, |
| 96 | + ) |
| 97 | + ) |
| 98 | + except (json.decoder.JSONDecodeError, KeyError) as exception: |
| 99 | + return Failure(f"Failed to parse 'pixi list' output: {stdout}\n{exception}") |
| 100 | + |
86 | 101 | # Make sure the environment can be solved and is up-to-date |
87 | 102 | returncode, stdout, stderr = await subprocess_exec( |
88 | 103 | "pixi", |
|
0 commit comments