1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
Requirements
============
.. currentmodule:: packaging.requirements
Parse a given requirements line for specifying dependencies of a Python
project, using the :ref:`specification of dependency specifiers
<pypug:dependency-specifiers>`, which defines the scheme that has been
implemented by this module.
Usage
-----
.. doctest::
>>> from packaging.requirements import Requirement
>>> simple_req = Requirement("name")
>>> simple_req
<Requirement('name')>
>>> simple_req.name
'name'
>>> simple_req.url is None
True
>>> simple_req.extras
set()
>>> simple_req.specifier
<SpecifierSet('')>
>>> simple_req.marker is None
True
>>> # Requirements can be specified with extras, specifiers and markers
>>> req = Requirement('name[foo]>=2,<3; python_version>"2.0"')
>>> req.name
'name'
>>> req.extras
{'foo'}
>>> req.specifier
<SpecifierSet('<3,>=2')>
>>> req.marker
<Marker('python_version > "2.0"')>
>>> # Requirements can also be specified with a URL, but may not specify
>>> # a version.
>>> url_req = Requirement('name @ https://github.com/pypa ;os_name=="a"')
>>> url_req.name
'name'
>>> url_req.url
'https://github.com/pypa'
>>> url_req.extras
set()
>>> url_req.marker
<Marker('os_name == "a"')>
>>> # You can do simple comparisons between requirement objects:
>>> Requirement("packaging") == Requirement("packaging")
True
>>> # You can also perform simple comparisons between sets of requirements:
>>> requirements1 = {Requirement("packaging"), Requirement("pip")}
>>> requirements2 = {Requirement("pip"), Requirement("packaging")}
>>> requirements1 == requirements2
True
.. versionchanged:: 23.2
When a requirement is specified with a URL, the :class:`Requirement` class
used to check the URL and reject values containing invalid scheme and
netloc combinations. This is no longer performed since the specification does
not have such rules, and the check incorrectly disallows valid requirement
strings from being parsed.
Reference
---------
.. class:: Requirement(requirement)
This class abstracts handling the details of a requirement for a project.
Each requirement will be parsed according to the specification.
:param str requirement: The string representation of a requirement.
:raises InvalidRequirement: If the given ``requirement`` is not parseable,
then this exception will be raised.
.. attribute:: name
The name of the requirement.
.. attribute:: url
The URL, if any where to download the requirement from. Can be None.
.. attribute:: extras
A set of extras that the requirement specifies.
.. attribute:: specifier
A :class:`~.SpecifierSet` of the version specified by the requirement.
.. attribute:: marker
A :class:`~.Marker` of the marker for the requirement. Can be None.
.. exception:: InvalidRequirement
Raised when attempting to create a :class:`Requirement` with a string that
does not conform to the specification.
|