nab-markersets
A PEP 508 marker read as the set of environments it selects.
packaging answers "does this marker hold here"; this answers "can
these two ever both hold", "does one imply the other", and "is this a
contradiction".
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 full, a contradiction as
empty, and complements the marker grammar cannot serialize. witness
returns a point in the set, which separates two markers that look like
one constraint.
>>> 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.errors IntractableMarkerSet, UnserializableMarkerSet
nab_markersets.markersets DecisionStore, MarkerSet, variable_names
The package root binds no names, so importing nab_markersets pulls in
no submodules.
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.17
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nab_markersets-0.0.17.tar.gz | 60.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nab_markersets-0.0.17-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 91.5 kB
Release files / nab_markersets-0.0.17.tar.gz
| Download URL | nab_markersets-0.0.17.tar.gz |
|---|---|
| Size | 60.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ece0e926d39d1f77a39652cd87da95e425e2f02acbac20e692e8b3e593903f46
|
|
BLAKE2b-256 checksum How to use checksums |
ec6ac4f7b21c80a2b5d7e740431f044755d3253648795f63ada3678c91c4f651
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 6, 2026.
Transparency logRelease files / nab_markersets-0.0.17-py3-none-any.whl
| Download URL | nab_markersets-0.0.17-py3-none-any.whl |
|---|---|
| Size | 31.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
67016caba6dff648148b4af3164a161606333778e8803d1fc031d16a6c543162
|
|
BLAKE2b-256 checksum How to use checksums |
e14b70b79a825de3ce5509c75d4fcb97d14474e06e827ac899e3b0753621b685
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 6, 2026.
Transparency log