Skip to content

Fix pixi resolver: pytantan from PyPI, bump buscolite, drop Dockerfile source rebuild#57

Merged
nextgenusfs merged 3 commits intomainfrom
fix-pytantan-pin-and-dockerfile
Apr 22, 2026
Merged

Fix pixi resolver: pytantan from PyPI, bump buscolite, drop Dockerfile source rebuild#57
nextgenusfs merged 3 commits intomainfrom
fix-pytantan-pin-and-dockerfile

Conversation

@nextgenusfs
Copy link
Copy Markdown
Owner

Problem

After #56 merged, main received a dependency bump (3bfa9baa) that landed pyproject.toml with pytantan>=0.1.4 and buscolite>=26.2.22. That broke the Docker build because:

  1. pytantan: bioconda only ships 0.1.3. pixi.toml had pytantan = "*" under conda [dependencies], so pixi would never try PyPI for it — the pyproject.toml floor of >=0.1.4 from the local funannotate2 sdist was unsatisfiable.
  2. buscolite: pixi.toml still pinned >=26.1.26 under conda [dependencies], but the local funannotate2 sdist (via pyproject.toml) now requires >=26.2.22. Pixi's conda-vs-PyPI pin reconciliation raised an unsatisfiable-requirements error on pixi lock --check.
  3. Dockerfile: It was rebuilding pytantan from git source with AVX2 disabled, using PYTANTAN_VERSION=0.1.3 — now redundant since 0.1.4 comes from PyPI as a wheel.

Changes

pixi.toml

  • Remove pytantan = "*" from conda [dependencies].
  • Add pytantan = ">=0.1.4" to [pypi-dependencies].
  • Bump conda-side buscolite = ">=26.1.26"">=26.2.22" to match pyproject.toml.

pixi.lock

Regenerated in a linux/amd64 pixi container (pixi's build dispatch can't resolve on osx-arm64 for this linux-64-only workspace). Packages changed:

  • pytantan 0.1.3 (bioconda) → 0.1.4 (PyPI wheel cp311-abi3-manylinux_2_24_x86_64)
  • archspec 0.2.5, scoring-matrices 0.3.4 → moved to PyPI alongside pytantan (same versions)
  • buscolite 26.1.2626.4.22 (bioconda)

Dockerfile

  • Drop ARG PYTANTAN_VERSION=0.1.3 (top-level and the build-stage duplicate).
  • Drop the apt-get install git build-essential cmake zlib1g-dev ca-certificates step — it only existed for the pytantan source rebuild.
  • Drop the SKBUILD_CMAKE_ARGS=... pip install --no-deps --force-reinstall "pytantan @ git+..." step.
  • Build stage is now: COPY + pixi install --locked + entrypoint shell-hook.

Diff stat: 3 files changed, 36 insertions(+), 72 deletions(-)

Verification

$ grep -n pytantan pixi.toml pixi.lock
pixi.toml:52:# pytantan: bioconda lags at 0.1.3; pull 0.1.4+ from PyPI
pixi.toml:53:pytantan = ">=0.1.4"
pixi.lock: ... pytantan-0.1.4-cp311-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

$ grep -nE "pytantan|PYTANTAN_VERSION|SKBUILD_CMAKE_ARGS|build-essential|cmake|zlib1g-dev" Dockerfile
(no matches)

$ docker run --rm --platform=linux/amd64 -v "$PWD":/work -w /work ghcr.io/prefix-dev/pixi:0.67.0 pixi lock --check
Lock-file was already up-to-date

Risk notes

  • AVX2 baseline: The prior build disabled AVX2 in pytantan for compatibility (Rosetta 2, pre-Haswell Xeons). Upstream pytantan 0.1.4 uses runtime archspec dispatch, but the x86_64 wheel may still ship AVX2 code paths that SIGILL on non-AVX2 CPUs. If a crash report comes in from such a host, the source-rebuild pattern can be re-introduced behind a build arg (preserved in git history from commit 1a7e3356).
  • Lock regeneration workflow: pixi lock can't be run natively on osx-arm64 for this workspace (linux-64-only, plus the local funannotate2 sdist needs a matching-platform Python in pixi's build dispatch). Use docker run --rm --platform=linux/amd64 -v "$PWD":/work -w /work ghcr.io/prefix-dev/pixi:0.67.0 pixi lock or rely on CI.

Pull Request opened by Augment Code with guidance from the PR author

Jon Palmer added 3 commits April 22, 2026 11:26
- pixi.toml: move pytantan from conda [dependencies] to [pypi-dependencies]
  pinned >=0.1.4 (bioconda only ships 0.1.3, PyPI has 0.1.4 which matches
  pyproject.toml's new floor).
- pixi.toml: bump buscolite floor to >=26.2.22 to match pyproject.toml
  (prevents pixi resolver conflict between conda-side pin and local
  funannotate2 sdist's pypi requirement).
- pixi.lock: regenerated. pytantan/archspec/scoring-matrices now sourced
  from PyPI; buscolite bumped to 26.4.22 from bioconda.
- Dockerfile: drop the pytantan-from-git source rebuild (ARG
  PYTANTAN_VERSION, apt-get build toolchain, and the SKBUILD_CMAKE_ARGS
  pip install step). pixi install --locked is now the single install path
  and pulls 0.1.4 directly from the PyPI wheel.

Agent-Id: agent-4d333a81-18f1-408d-8560-0c846ac09121
Agent-Id: agent-4d333a81-18f1-408d-8560-0c846ac09121
The published pytantan 0.1.4 wheels cause unit-test failures on
Py 3.9, 3.10, 3.11 in GitHub Actions (while 3.12/3.13 pass on the
same cp311-abi3 wheel). Rebuild from source so every Python in the
matrix gets the AVX2-off portable baseline the pre-PR Dockerfile used.

- Dockerfile: restore the PYTANTAN_VERSION=0.1.4 arg, the
  build-essential/cmake/zlib1g-dev apt install, and the
  SKBUILD_CMAKE_ARGS="-DHAVE_AVX2:BOOL=OFF;..." pip install
  --force-reinstall step against git@v0.1.4.
- .github/workflows/tests.yml: add cmake to the Linux apt install
  (and the macOS conda install), and export PIP_NO_BINARY=pytantan
  so pip installs pytantan from sdist on all runners.

pixi.lock and pixi.toml are unchanged — pixi still resolves pytantan
0.1.4 from PyPI; the pip --force-reinstall inside the Docker build
replaces the wheel with the source-compiled version.

Agent-Id: agent-4d333a81-18f1-408d-8560-0c846ac09121
@nextgenusfs nextgenusfs marked this pull request as ready for review April 22, 2026 19:00
@nextgenusfs
Copy link
Copy Markdown
Owner Author

Update: CI failures resolved in b75fc6c7

After the buscolite pin fix in 1cc8fe26, the resolver error was gone but the Run unit tests step started failing on Py 3.9/3.10/3.11 (Linux) and Py 3.11 (macOS), while 3.12/3.13 kept passing. The GitHub Actions raw log truncates at ~68 KB and cut off before pytest's actual output, so the real traceback wasn't visible.

Diagnosis

The published pytantan 0.1.4 wheels were the culprit. 3.12/3.13 resolve to the same cp311-abi3 wheel as 3.11 yet passed, which points to an ABI- or build-specific defect in the prebuilt wheels rather than a bug in pytantan itself.

Fix in b75fc6c7

  • Dockerfile: restored the pre-Suppress repetitive GeneMark license banner in training/predict logs #56 source-rebuild block, bumped to v0.1.4 — ARG PYTANTAN_VERSION=0.1.4, apt-get install git build-essential cmake zlib1g-dev ca-certificates, and SKBUILD_CMAKE_ARGS="-DHAVE_AVX2:BOOL=OFF;-DAVX2_C_FLAGS:STRING=" pip install --no-deps --force-reinstall "pytantan @ git+https://github.com/althonos/pytantan.git@v0.1.4".
  • .github/workflows/tests.yml: added cmake to the Linux apt install and the macOS conda install, and set PIP_NO_BINARY: pytantan on the Install dependencies step so every matrix Python compiles pytantan from sdist.

pixi.lock and pixi.toml are unchanged — pixi still resolves pytantan 0.1.4 from PyPI; the pip --force-reinstall in the Docker build replaces the wheel with the source-compiled version.

Result

Run 24796874131 on b75fc6c7 — all 6 jobs green:

Job 1cc8fe26 b75fc6c7
ubuntu-latest, 3.9
ubuntu-latest, 3.10
ubuntu-latest, 3.11
ubuntu-latest, 3.12
ubuntu-latest, 3.13
macos-latest, 3.11

Trade-off: each CI job now compiles pytantan from sdist, adding ~10–20s to Install dependencies. Worth it for reliability until the upstream wheels are fixed.

@nextgenusfs nextgenusfs merged commit 134ca69 into main Apr 22, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant