Skip to main content

sync pipfile.lock to setup.py

Project description

Pipenv-Setup

travis-badge PyPI pyversions codecov

Sync dependencies in Pipfile.lock to setup.py

A beautiful python package development tool.

Never need again to change dependencies manually in setup.py and enjoy the same dependency locking

Or just check whether setup.py and pipfile are consistent and sync dependency when necessary

Install

$ pipenv install --dev pipenv-setup

it creates command line entry $ pipenv-setup

Features

Beautiful pipenv flavored help

`$ pipenv-setup`

help

Sync Pipfile.lock to setup.py

  • supports assorted package configuration. You can have a pipfile as ugly as you want:

    [package]
    requests = { extras = ['socks'] }
    records = '>0.5.0'
    django = { git = 'https://github.com/django/django.git', ref = '1.11.4', editable = true }
    "e682b37" = {file = "https://github.com/divio/django-cms/archive/release/3.4.x.zip"}
    "e1839a8" = {path = ".", editable = true}
    pywinusb = { version = "*", os_name = "=='nt'", index="pypi"}
    

    pipenv-setup will still figure things out:

    $ pipenv-setup sync

    package e1839a8 is local, omitted in setup.py
    setup.py successfully updated
    23 packages from Pipfile.lock synced to setup.py
    

    And things will be where they should be

    # setup.py
        install_requires=[
            "certifi==2017.7.27.1",
            "chardet==3.0.4",
            "pywinusb==0.4.2; os_name == 'nt'",
            ...,
            "xlrd==1.1.0",
            "xlwt==1.3.0",
        ],
        dependency_links=[
            "git+https://github.com/django/django.git@1.11.4#egg=django",
            "https://github.com/divio/django-cms/archive/release/3.4.x.zip",
        ],
    
  • Blackened setup.py file.

  • Template generation with filled dependencies in the absence of a setup file.

    $ pipenv-setup sync

    setup.py not found under current directory
    Creating boilerplate setup.py...
    setup.py successfully generated under current directory
    23 packages moved from Pipfile.lock to setup.py
    Please edit the required fields in the generated file
    

Checks Only

run $ pipenv-setup check

  • checks four items

    • local package in default pipfile packages
    • Package version requirements in install_requires in setup.py that potentially violates Pipfile
    • Package version requirements in dependency_links in setup.py that differs from Pipfile
    • Default package in pipfile missing in install_requires or dependency_links in setup.py
  • exits with non-zero code when conflict found (for use in travis-ci)

  • here is a somewhat extreme example

    $ pipenv-setup check
    
    package 'pywinusb' has version string: ==0.4.2 in setup.py, which is disjoint from ~=0.3.0 in pipfile
    package 'records' has version string: >=0.4.2,<0.5 in setup.py, which is disjoint from >0.5.0 in pipfile
    package 'django' has branch/version 1.11.5 in dependency_links which is different than 1.11.4 listed in pipfile
    package 'requests' in pipfile but not in install_requires
    package 'e682b37' has a url in pipfile but not in dependency_links
    (exits with 1)
    
  • provide --ignore-local flag to allow local packages in pipfile

    $ pipenv-setup check
    
    local package found in default dependency: e1839a8.
    Do you mean to make it dev dependency    
    (exits with 1)
    
    $ pipenv-setup check --ignore-local
    
    No version conflict or missing packages/dependencies found in setup.py!
    (exits with 0)
    
  • provide --strict flag to only pass identical version requirements

    By default pipenv-setup check passes when the version setup.py specifies is "compatible" with Pipfile, i.e. is a subset of it.

    For example, pipenv-setup check exits with zero for the following cases

    pipfile: django~=1.1 setup.py: django==1.2.

    pipfile: django>1.1 setup.py: django>=1.2, django<1.5

    Providing --strict allows identical requirements only, e.g.

    pipfile: django~=1.1 setup.py: django>=1.1, django<2.0.

    Example output:

    pipenv-setup check --strict
    
    package pywinusb has version string: ==0.4.2 in setup.py, which specifies a subset of * in pipfile
    package records has version string: ==0.5.2 in setup.py, which specifies a subset of >0.5.0 in pipfile
    package requests has version string: ==2.18.4 in setup.py, which specifies a subset of  in pipfile
    (exits with 1)
    

Travis CI

You can add pipenv-setup to .travis.yml and sync automatically before every pypi release. Or just check consistency and fail the build to remind manual modification.

The following yml file is an example that runs tests on python 3.6 and 3.7 and automatically syncs pipfile dependencies to setup.py before every release. For explanation see this gist

language: python
dist: xenial

install: 'pipenv install --dev'
script: 'pytest'

stages:
- test
- deploy
jobs:
  include:
  - python: '3.7'
  - python: '3.6'
  - stage: deploy
    script: 'pipenv-setup sync'
    deploy:
      provider: pypi
      user: Madoshakalaka
      password:
        secure: xxxxxxxxx
      on:
        tags: true

Note

$ pipenv-setup sync command syncs Pipfile.lock to setup.py

While $ pipenv-setup check checks conflicts between Pipfile and setup.py (not Pipfile.lock!)

This means sync will copy pinned versions from Pipfile.lock. This ensures the releases runs with almost exact the same dependencies as the dev environment.

While check allows more relaxed constraints (when you have semantic versioning in pipfile)

There is no philosophy behind this asymmetry and it makes a lot of sense to allow more user choice: add sync --pipfile and check --lock functionality. I welcome a feature request or PR :)

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

pipenv-setup-2.1.6.tar.gz (17.4 kB view hashes)

Uploaded Source

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