requirements

Requirement expressions

Requirement expressions are strings representing a required software package. They are defined by this EBNF grammar:

requirement_expression ::=  name build_options? constraints_expression?
name                   ::=  [A-Za-z0-9][-A-Za-z0-9]*
build_options          ::=  '[' name (',' name)* ']'
constraints_expression ::=  constraint_expression (',' constraint_expression)*
constraint_expression  ::=  operator version_expression
operator               ::=  '==' | '!=' | '>' | '<' | '<=' | '>='
version_expression     ::=  main | main '-' prerelease | main '+' build_metadata | main '-' prerelease '+' build_metadata
main                   ::=  major ('.' minor ('.' patch)?)?
major                  ::=  number
minor                  ::=  number
patch                  ::=  number
prerelease             ::=  string | number
build_metadata         ::=  string
number                 ::=  [0-9]+
string                 ::=  [0-9a-zA-Z.-]+

The Requirement.parse() class method parses requirement expressions into Requirement objects:

>>> from versions import Requirement
>>> r = Requirement.parse('foo')
>>> r.name
'foo'
>>> r = Requirement.parse('foo >1.0, <2.0')
>>> r.version_constraints
Constraints.parse('>1.0.0,<2.0.0')
>>> r = Requirement.parse('vim [python, perl] >7')
>>> r.build_options
set(['python', 'perl'])

Matching

The Requirement.match() method returns True when passed a package which satisfies the requirement:

>>> from versions import Requirement, Package, Version
>>> Requirement('foo').match(Package('foo', Version.parse('1.0')))
True

If passed a str, it is automatically parsed using Package.parse():

>>> Requirement.parse('foo [baz, bar] >0.9').match('foo-1.0+bar.baz')
True

Matching can also be tested using the in operator:

>>> 'foo-0.2' in Requirement.parse('foo [bar] >0.9')
False

Requirement

class versions.requirements.Requirement(name, version_constraints=None, build_options=None)[source]

Package requirements are used to define a dependency from a Package to another.

Parameters:
  • name (str) – The required package name.
  • version_constraints (Version or None) – Constraints on the package version.
  • build_options (set of str or None) – Required build options.
name = None

Name of the required package.

version_constraints = None

Constraints on the required package version.

build_options = None

set of required build options

match(package)[source]

Match package with the requirement.

Parameters:package (package expression string or Package) – Package to test with the requirement.
Returns:True if package satisfies the requirement.
Return type:bool
classmethod parse(requirement_expression)[source]

Parses a requirement_expression into a Requirement object.

Parameters:requirement_expression (requirement_expression) – A package requirement expression.
Return type:Requirement

Table Of Contents

Previous topic

constraints

Next topic

packages