pytest
pytest copied to clipboard
With 8.2.0, attempt to import docs from niece module fails
This issue is perhaps one of the weirdest and most obscure I've seen. My investigation began in jaraco/jaraco.xonsh#1. The summary is this:
- In GitHub actions (only), during collection, when attempting to collect
docs/conf.py, something outside the call stack attempts toimport jaraco.xonsh.docs, even thoughjaraco.xonshis a module anddocsis a sibling ofjaraco. - The issue is present in multiple Python versions (at least 3.10-3.12).
- The issue does not replicate when testing locally (either in a Linux Docker container or in macOS).
- The issue does replicate when using act to simulate the GitHub actions using Docker.
- Pinning to pytest<8.2 suppresses the failure.
- Disabling the xonsh plugin suppresses the failure.
- Note that jaraco.xonsh is a xonsh module in a PEP 420 namespace.
- Importing
jaraco.xonshmight not be problematic except:- xonsh itself has a pytest plugin that configures subprocesses to raise on error
- The
jaraco.xonshmodule hasn't been collected or tested (in earlier runs or with pytest 8.2 when it passes locally).
As you might imagine, creating a minimal example is near impossible given the peculiarities of this scenario. The jaraco.xonsh project is nearly a minimal example in itself. The easiest way to replicate the issue is to clone the project at 249226010f9c9e5490dab851947efba2dceecb63, install act, and run the command in https://github.com/jaraco/jaraco.xonsh/issues/1#issuecomment-2084576106.
Questions for which I'm hoping to find answers:
- [ ] What is it about GHA that the issue only occurs there?
- [ ] What is it that's trying to import
jaraco.xonsh.docsand why doesn't it show up in the stack trace? - [x] What's new in pytest 8.2 that would trigger this behavior?
- [ ] How is it that collecting "docs/conf.py" would ever try to import "jaraco.xonsh.docs"?
What's new in pytest 8.2 that would trigger this behavior?
I somewhat painstakingly bisected this by using your act command and adjusting
diff --git i/pyproject.toml w/pyproject.toml
index ebdbf83..1fbe042 100644
--- i/pyproject.toml
+++ w/pyproject.toml
@@ -30,7 +30,7 @@ Homepage = "https://github.com/jaraco/jaraco.xonsh"
[project.optional-dependencies]
testing = [
# upstream
- "pytest >= 6, != 8.1.1",
+ "pytest @ git+https://github.com/pytest-dev/pytest@17fc20af78d0c7b739806c4e461d2c9b8c30ceeb",
"pytest-checkdocs >= 2.4",
"pytest-cov",
"pytest-mypy",
accordingly.
This points me to 99890636bfd9bb156655050f22f1df47e74ac3f6, see:
- #12169
- #12112