https://github.com/pdm-project/dep-logic
Python dependency specifications supporting logical operations
https://github.com/pdm-project/dep-logic
Last synced: 7 months ago
JSON representation
Python dependency specifications supporting logical operations
- Host: GitHub
- URL: https://github.com/pdm-project/dep-logic
- Owner: pdm-project
- License: apache-2.0
- Created: 2023-11-21T09:29:00.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-06-10T00:54:34.000Z (7 months ago)
- Last Synced: 2025-06-11T06:26:25.720Z (7 months ago)
- Language: Python
- Size: 102 KB
- Stars: 26
- Watchers: 2
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Dep-Logic



Python dependency specifications supporting logical operations
## Installation
```bash
pip install dep-logic
```
This library requires Python 3.8 or later.
Currently, it contains two sub-modules:
- `dep_logic.specifier` - a module for parsing and calculating PEP 440 version specifiers.
- `dep_logic.markers` - a module for parsing and calculating PEP 508 environment markers.
## What does it do?
This library allows logic operations on version specifiers and environment markers.
For example:
```pycon
>>> from dep_logic.specifiers import parse_version_specifier
>>>
>>> a = parse_version_specifier(">=1.0.0")
>>> b = parse_version_specifier("<2.0.0")
>>> print(a & b)
>=1.0.0,<2.0.0
>>> a = parse_version_specifier(">=1.0.0,<2.0.0")
>>> b = parse_version_specifier(">1.5")
>>> print(a | b)
>=1.0.0
```
For markers:
```pycon
>>> from dep_logic.markers import parse_marker
>>> m1 = parse_marker("python_version < '3.8'")
>>> m2 = parse_marker("python_version >= '3.6'")
>>> print(m1 & m2)
python_version < "3.8" and python_version >= "3.6"
```
## About the project
This project is based on @sdispater's [poetry-core](https://github.com/python-poetry/poetry-core) code, but it includes additional packages and a lark parser, which increases the package size and makes it less reusable.
Furthermore, `poetry-core` does not always comply with PEP-508. As a result, this project aims to offer a lightweight utility for dependency specification logic using [PyPA's packaging](https://github.com/pypa/packaging).
Submodules:
- `dep_logic.specifiers` - PEP 440 version specifiers
- `dep_logic.markers` - PEP 508 environment markers
- `dep_logic.tags` - PEP 425 platform tags
## Caveats
Logic operations with `===` specifiers is partially supported.