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 Common errors
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.
Warnings
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.
Imports
- Requirement wrong
from requirementslib.models import Requirementcorrectfrom requirementslib import Requirement - Lockfile
from requirementslib import Lockfile - Pipfile
from requirementslib import Pipfile
Quickstart
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)