Skip to main content

sync pipfile.lock to setup.py

Project description

Pipenv-Setup

travis-badge PyPI pyversions codecov PyPI version Code style: black

Sync dependencies in Pipfile or Lockfile 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 semantic versioning

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 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",
        ],
    
  • provide --dev flag to sync development packages to extras_require

    $ pipenv-setup sync --dev
    
    setup.py successfully updated
    1 default packages from Pipfile.lock synced to setup.py
    1 dev packages from Pipfile.lock synced to setup.py
    
    # produced setup.py
    
    extras_require={"dev": ["pytest==1.1.3",]},
    install_requires=["xml-subsetter==0.0.1"],
    
  • provide --pipfile flag to sync Pipfile instead of lockfile.

  • 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
    

Note: by default $ pipenv-setup syncs lockfile instead of pipfile

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 (can be used in travis-ci)

  • here is a somewhat extreme example

    $ pipenv-setup check
    
    package 'numpy' has version string: >=1.2 in setup.py, which potentially violates >=1.5 in pipfile
    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, pipfile: django~=1.1 setup.py: django==1.2 is such a case.

    provide --strict to allow only identical requirements such as pipfile: django~=1.1 setup.py: django>=1.1,<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 'django' has version string: >=0.5 in setup.py, which is disjoint from ~=0.3.0 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)
    

Contributing

If you'd like to contribute to pipenv-setup. See Contribution Guide

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.2.0.tar.gz (23.3 kB view details)

Uploaded Source

File details

Details for the file pipenv-setup-2.2.0.tar.gz.

File metadata

  • Download URL: pipenv-setup-2.2.0.tar.gz
  • Upload date:
  • Size: 23.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.3

File hashes

Hashes for pipenv-setup-2.2.0.tar.gz
Algorithm Hash digest
SHA256 04eb6102f6ee1c9a2b22a6982e457161d1b46199f92f15f3b5ac1d788b78f275
MD5 8964dfb303028c2d24c1c62f7bc8779c
BLAKE2b-256 3693409d146f2dfe60a503fab06d728801d5cbf8aaf6a244001803673cab3aec

See more details on using hashes here.

Supported by

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