{"id":24521,"library":"requirementslib","title":"RequirementsLib","description":"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.","status":"active","version":"3.0.0","language":"python","source_language":"en","source_url":"https://github.com/sarugaku/requirementslib","tags":["pipfile","requirements","pipeline","pip","packaging"],"install":[{"cmd":"pip install requirementslib","lang":"bash","label":"Latest stable"}],"dependencies":[],"imports":[{"note":"In v2.x, Requirement was under models; v3 flattened the API.","wrong":"from requirementslib.models import Requirement","symbol":"Requirement","correct":"from requirementslib import Requirement"},{"symbol":"Lockfile","correct":"from requirementslib import Lockfile"},{"symbol":"Pipfile","correct":"from requirementslib import Pipfile"}],"quickstart":{"code":"from requirementslib import Requirement, Pipfile\n\n# Parse a single requirement\nreq = Requirement.from_line('requests==2.31.0')\nprint(req.as_line())\n\n# Load a Pipfile\npf = Pipfile.load('Pipfile')\nprint(pf.sections)\n","lang":"python","description":"Basic usage: creating a Requirement from a pip line and loading a Pipfile."},"warnings":[{"fix":"Ensure code does not rely on attrs internals. Use public methods for serialization/deserialization.","message":"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.","severity":"breaking","affected_versions":">=3.0.0"},{"fix":"Replace 'from requirementslib.models import ...' with 'from requirementslib import ...'.","message":"The 'requirementslib.models' submodule is removed in v3. Import directly from requirementslib instead.","severity":"deprecated","affected_versions":">=3.0.0"},{"fix":"Access req.name for normalized form; use req.as_line() to preserve original casing in output if needed.","message":"Package name handling: Requirement.from_line('MyPackage') will lowercase the name. Use the 'name' property to get the canonical normalized name.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Use: from requirementslib import Requirement","cause":"v3 removed the models submodule; imports flattened to top-level.","error":"from requirementslib.models import Requirement -> ImportError: cannot import name 'Requirement' from 'requirementslib.models'"},{"fix":"Use public API: req.as_line() or req.name.","cause":"Code accessing private internals that changed in v3.","error":"AttributeError: 'Requirement' object has no attribute '_line'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}