Skip to main content

nab-markersets

A dependency marker is a condition such as python_version < "3.11" that controls when a requirement applies. This package compares PEP 508 markers as sets of environments. packaging evaluates a marker against one environment. nab-markersets checks whether markers overlap, whether one implies another, and whether a marker is contradictory.

Experimental. The API can change in any release, so pin an exact version.

>>> from nab_markersets.markersets import MarkerSet
>>> old = MarkerSet.from_marker('python_version < "3.11"')
>>> new = MarkerSet.from_marker('python_version >= "3.12"')
>>> old.is_disjoint(new)
True

MarkerSet represents an absent marker as all supported environments and a contradiction as no environments. It can also represent complements that PEP 508 cannot serialize. witness returns an environment satisfying the set; the example below finds one where two markers differ.

>>> minor = MarkerSet.from_marker('python_version >= "3.11"')
>>> exact = MarkerSet.from_marker('python_full_version >= "3.11.0"')
>>> minor.equivalent(exact)
False
>>> (minor & ~exact).witness()["python_full_version"]
'3.11.0.dev0'

Installing

The engine runs on packaging's parse tree and its single-atom evaluator. Two copies of packaging exist: the released one, and the fork nab vendors. An extra picks which.

pip install "nab-markersets[packaging]"
pip install "nab-markersets[nab-vendored-packaging]"

The first copy at version 26.3 or newer is used. The vendored fork is tried first, followed by released packaging.

A Marker from the other copy is accepted too. If neither copy is new enough, importing nab_markersets.markersets fails and says what it found.

When to use it

Whether two lock entries can both apply, whether a dependency is reachable inside your requires-python, or what a marker still says once you fix the platform. The guide covers those tasks and the limits of its decisions: https://nab.readthedocs.io/en/stable/how-to/reason-about-markers.html

The public API

The supported API is the module paths below. Everything else in the package is internal and may be renamed or relocated in any release.

nab_markersets.conversions  MarkerSetCache, PreparedMarkerSets
nab_markersets.errors       IntractableMarkerSet, UnserializableMarkerSet
nab_markersets.markersets   DecisionStore, MarkerSet, factor_membership_marker, variable_names

The package root binds no names, so importing nab_markersets pulls in no submodules.

MarkerSet.from_marker_with_variables returns a set and its original variable names from one parse. Names include variables removed by normalization.

pickle.dumps can write a MarkerSet, but pickle.loads fails because direct construction is refused. == compares construction trees; use equivalent to compare the environments two sets select.

Metadata

Release files for nab-markersets 0.0.29

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nab-markersets 0.0.29
File Size Uploaded Provenance Actions
nab_markersets-0.0.29.tar.gz 112.8 kB With provenance Details for nab_markersets-0.0.29.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for nab-markersets 0.0.29
File Interpreter ABI Platform Actions
nab_markersets-0.0.29-py3-none-any.whl Python 3 none any Details for nab_markersets-0.0.29-py3-none-any.whl

Total release size: 159.2 kB

Release files / nab_markersets-0.0.29.tar.gz

Download URL nab_markersets-0.0.29.tar.gz
Size 112.8 kB
Tags Source
SHA-256 checksum
How to use checksums
8b08bdcde652b3a8f40e3c1ce85b5c6b1e44ff98ace740a12ae0e532ca2da206
BLAKE2b-256 checksum
How to use checksums
406c0c85bed0b7d14abe27d6015526d7e051d9f239c2c309763317bb41ef55ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 12, 2026.

Transparency log

Release files / nab_markersets-0.0.29-py3-none-any.whl

Download URL nab_markersets-0.0.29-py3-none-any.whl
Size 46.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ac35d78b773ef3f90653fb0060fde832da4fe2daf756c38e8ffef61edda5bde4
BLAKE2b-256 checksum
How to use checksums
240c006d10659a96a86788b80f9434fa21cf7e50293fa577d6f8b542190f255d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 12, 2026.

Transparency log

Security for nab-markersets 0.0.29

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for nab_markersets-0.0.29.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 12, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page