Python - Dependency Management

> Procedural Languages > Python > Python - (Shipping|Packaging)

1 - About

Advertising

3 - Declaration

See:

3.1 - requirement specifier

When you install a package, or declaring a dependency, you need to specify an package id that's known in Python as a requirement specifier.

It's the setuptools and pkg_resources package syntax

PyPiProjectName [extra's] [comparison_operator version_identifier]

where:

  • PyPiProjectName is the project’s PyPI name,
  • optionally followed by a comma-separated list of “extras” in square brackets,
  • optionally followed by a comma-separated list of version specifiers where a version specifier is:
    • one of the operators <, >, ⇐, >=, == or !=,
    • followed by a version identifier.

Example of requirement specifiers:

docutils >= 0.3

# comment lines and \ continuations are allowed in requirement strings
BazSpam ==1.1, ==1.2, ==1.3, ==1.4, ==1.5, \
    ==1.6, ==1.7  # and so are line-end comments

# Extra
PEAK[FastCGI, reST]>=0.5a4

setuptools==0.5a7
Advertising

3.2 - Non Mandatory (Extras)

4 - Location

4.1 - Setup.py

Library dependencies are specified in the install_requires property of the Python - setup.py file.

It takes a string or list of strings containing requirement specifiers specifying what other distributions need to be installed.

When the project is installed by pip, this is the specification that is used to install its dependencies.

Example:each requirement must begin on a new line.

install_requires=required,
install_requires=['projectname>=0.3']
install_requires=[
   'projectnameA>=1,<2',
   'projectnameB>=2'
]

where:

4.1.1 - Operating System

4.2 - Requirement file

Pip Requirements Files

There is no dependency tree mechanism

Example of file:

requirements.txt
requests==2.11.1
websocket-client==0.37.0
...
Advertising

4.3 - Pipfile

There is no dependency tree mechanism. Use setup.py

Pipfile is the configuration file of the pipenv utility and is aimed to an application. (Weird). Ie a library that will never be reused by others.

Pipfile and its sister Pipfile.lock are a replacement for the existing standard pip's requirements.txt file

See:

5 - Management

5.1 - Installation

5.1.1 - From setup.py file

pip install -e .
pip install -e git+https://somerepo/bar.git#egg=bar

where:

  • The first line says to install your project and any dependencies.
  • The second line overrides the “bar” dependency, such that it’s fulfilled from VCS, not PyPI.

5.1.2 - From setup.py file without dependency

Installation without dependency

pip install XXX --no-deps

5.1.3 - From a Requirements File

With a Pip Requirements Files in a virtual environment or global

pip install -r requirements.txt

5.2 - List

  • List the package (dependency) installed in your environment
pip list --format=columns
Package          Version
---------------- -------
Flask            0.11.1
pip              18.1
requests         2.11.1
setuptools       39.0.1
...

6 - Specification

7 - Documentation / Reference