RequirementsLib

raw JSON →
3.0.0 verified Fri May 01 auth: no python

A Python library for converting between pip-style requirements and Pipfile/Pipfile.lock formats. Version 3.0.0 is a major overhaul that replaced attrs with pydantic for validation. Maintained irregularly.

pip install requirementslib
error from requirementslib.models import Requirement -> ImportError: cannot import name 'Requirement' from 'requirementslib.models'
cause v3 removed the models submodule; imports flattened to top-level.
fix
Use: from requirementslib import Requirement
error AttributeError: 'Requirement' object has no attribute '_line'
cause Code accessing private internals that changed in v3.
fix
Use public API: req.as_line() or req.name.
breaking In v3.0.0, the internal validation changed from attrs to pydantic. Custom Requirement subclasses or direct attribute manipulation may break. The public API (from_line, as_line, etc.) remains the same.
fix Ensure code does not rely on attrs internals. Use public methods for serialization/deserialization.
deprecated The 'requirementslib.models' submodule is removed in v3. Import directly from requirementslib instead.
fix Replace 'from requirementslib.models import ...' with 'from requirementslib import ...'.
gotcha Package name handling: Requirement.from_line('MyPackage') will lowercase the name. Use the 'name' property to get the canonical normalized name.
fix Access req.name for normalized form; use req.as_line() to preserve original casing in output if needed.

Basic usage: creating a Requirement from a pip line and loading a Pipfile.

from requirementslib import Requirement, Pipfile

# Parse a single requirement
req = Requirement.from_line('requests==2.31.0')
print(req.as_line())

# Load a Pipfile
pf = Pipfile.load('Pipfile')
print(pf.sections)