Skip to main content

Dependency management via Pipfile

Project description

setuptools-pipfile

Dependency management via Pipfile

Travis (.org) PyPI Python

Overview

In basic mode setuptools-pipfile does the following:

  • Populates install_requires from the packages table.
  • Populates tests_require from the dev-packages table.
  • Populates dependency_links from the source tables if needed by dependencies.

Advanced configuration can be used to control:

  • The path to the Pipfile.
  • Variable interpolation.
  • Activate and control populating extras_require.
  • Control populating python_requires.

To understand why this isn't enabled by default see Advanced Usage.

Basic Usage

Add setuptools-pipfile to setup_requires and use_pipfile=True in your setup.py.

This assumes that the Pipfile is in the same file directory as setup.py.

If the Pipfile is located elsewhere you can set use_pipfile to a path relative to setup.py.

Advanced Usage

These are features that aren't currently provided by pipenv but hope they will be in the future.

To enable advanced mode simply provide a dict of options to use_pipfile.

Pipfile Path

To change the path in advanced mode simply set the path key

setup(use_pipfile={'path': 'src/Pipfile'})

Environment Variable Interpolation

If this pipenv feature is required for some reason it can reenabled by setting the interpolate key.

setup(use_pipfile={'interpolate': True})

Populate Python Requires

Pipfile currently locks to a specific minor version. This is copied to Pipfile.lock. A better behaviour would be to allow defining a range of permissible versions. Then upon running pipenv install a concreate version is locked into Pipfile.lock.

To enable this in the future set the pythons key to True.

To change the key to lookup set the pythons key to an alternate format string.

setup(use_pipfile={'pythons': '{0[requires][python_versions]}'})

Populate Extras

This is currently not supported by Pipfile but if it does it will likely be supported in one of two ways.

Style One

The first and more likely style looks like so:

[extra.socks]
PySocks = {version = ">=1.5.6, !1.5.7"}
win_inet_pton = {sys_platform = "win32", python_version = "2.7"}

To use the default setup for style one:

setup(use_pipfile={'extras': True})

To change the prefix for the table to something like [option.socks] use:

setup(use_pipfile={'extras': {'table': 'option'}})

Style Two

The second style is based on poetry syntax.

[[extra]]
name = "socks"

[extra.packages]
PySocks = {version = ">=1.5.6, !1.5.7"}
win_inet_pton = {sys_platform = "win32", python_version = "2.7"}

To use the default setup for style two:

setup(use_pipfile={'extras': {'style': 2}})

Like style one use the table field to change the table prefix.

setup(use_pipfile={'extras': {'style': 2, 'table': 'option'}})

Use the subtable field to change the suffix used to describe the packages.

setup(use_pipfile={'extras': {'style': 2, 'subtable': 'requires'}})

To change the packaging suffix to something like [extras.require] use:

setup(use_pipfile={'extras': {'style': 2, 'table': 'extras', 'subtable': 'require'}})

Finally to change the key used to identify the extra group use:

setup(use_pipfile={'extras': {'style': 2, 'key': 'title'}})

This would result in:

[[extra]]
title = "socks"

Future State

While there is no current plan to develop this further, the future is always changing. If pipenv and the Pipfile implements a different way to do something this will change with it. That being said any breaking changes will be accompanied by a major version increment.

To ensure future compatibility either:

  • make sure dependency on this package has an upper bounds on the major version
  • or explicitly set all configuration options.

For example to enable extras style 1 and hard set all the current defaults

setup(
    use_pipfile={
        'path': 'Pipfile',
        'interpolate': False,
        'pythons': False,
        'extras': {
            'style': 1,
            'table': 'extra'
        }
    }
)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

setuptools-pipfile-0.1.1.tar.gz (8.3 kB view hashes)

Uploaded Source

Built Distribution

setuptools_pipfile-0.1.1-py2.py3-none-any.whl (6.8 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page