#!/usr/bin/env python # -*- coding: utf-8 -*- import json import toml def read_pipenv_lock(): with open('Pipfile.lock') as lock: return json.loads(lock.read()) def read_pipenv(): with open('Pipfile') as pipfile: return toml.loads(pipfile.read()) def convert_version(version): return version.replace('==', '^') def to_name_version_notation(pipfile, lock, section): category = 'packages' if section == 'default' else 'dev-packages' notations = {} dependencies = lock[section] for dep in dependencies: if dep not in pipfile[category]: continue try: notations.update({dep: convert_version(dependencies[dep]['version'])}) except KeyError as e: errors.append(f'{dep} - ({e.__class__.__name__}) {e} - {dependencies[dep]}') return notations if __name__ == '__main__': errors = [] pipfile = read_pipenv() lock = read_pipenv_lock() for section in ['default', 'develop']: print('Section:', section) current = to_name_version_notation(pipfile, lock, section) for dep, version in current.items(): print(dep, '=', '"' + version + '"') print() if len(errors): print('errors encountered:') for error in errors: print(f'- {error}')