{ "info": { "author": "Aaron Kirkbride, Adam Johnson, et al.", "author_email": "me@adamj.eu", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: ISC License (ISCL)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Utilities" ], "description": "========\npip-lock\n========\n\n.. image:: https://img.shields.io/pypi/v/pip-lock.svg\n :target: https://pypi.python.org/pypi/pip-lock\n\n.. image:: https://img.shields.io/travis/adamchainz/pip-lock/master.svg\n :target: https://travis-ci.org/adamchainz/pip-lock\n\nCheck for differences between requirements.txt files and your environment.\n\nAt YPlan, we automatically call ``check_requirements()`` during development and testing to provide developers instant\nfeedback if their environment is out of sync with the current requirements.txt. This ensures that developers do\nnot experience unexpected behaviour or errors related to out of sync requirements.\n\n\nInstallation\n============\n\nInstall with **pip**:\n\n.. code-block:: python\n\n pip install pip-lock\n\nPython 3.4+ supported.\n\nExample usage\n=============\n\n.. code-block:: python\n\n from pip_lock import check_requirements\n\n # Check requirements and if there are any mismatches, print a message and die with exit code 1\n check_requirements('requirements.txt')\n\n\n.. code-block:: python\n\n from pip_lock import get_mismatches\n\n # Get mismatches as a dictionary of package names to tuples (expected_version, actual_version)\n # e.g. {'django': ('1.10.2', None), 'requests': ('2.11.1', '2.9.2')}\n mismatches = get_mismatches('requirements.txt')\n\n\nAt YPlan, we call ``check_requirements()`` within our Django ``manage.py`` which checks the requirements every time\nDjango starts or tests are run. We recommend checking the environment to ensure it is not run in a production\nenvironment, to avoid slowing down application startup.\n\nAPI\n===\n\n``check_requirements(requirements_file_path, post_text='')``\n------------------------------------------------------------\n\nExit with exit code 1 and output to stderr if there are mismatches between the environment and requirements file.\n\n``requirements_file_path`` is the path to the ``requirements.txt`` file - we recommend using an absolute file path.\n\n``post_text`` is optional text which is displayed after the stderr message. This can be used to display instructions\non how to update the requirements.\n\nExample:\n\n.. code-block:: python\n\n check_requirements(\n 'requirements.txt',\n post_text='\\nRun the following on your host machine: \\n\\n vagrant provision\\n'\n )\n\n.. code-block:: bash\n\n There are requirement mismatches with requirements.txt:\n * Package Django has version 1.9.10 but you have version 1.9.0 installed.\n * Package requests has version 2.11.1 but you have version 2.11.0 installed.\n * Package requests-oauthlib is in requirements.txt but not in virtualenv\n\n Run the following on your host machine:\n\n vagrant provision\n\n``get_mismatches(requirements_file_path, post_text='')``\n--------------------------------------------------------\n\nReturn a dictionary of package names to tuples of ``(expected_version, actual_version)`` for mismatched packages.\n\n``requirements_file_path`` is the path to the ``requirements.txt`` file - we recommend using an absolute file path.\n\nExample:\n\n.. code-block:: python\n\n >>> get_mismatches('requirements.txt')\n {'django': ('1.10.2', '1.9.0'), 'requests': ('2.11.1', '2.9.2'), 'request-oauthlib': ('0.7.0', None)}\n\n\n.. :changelog:\n\nHistory\n=======\n\n.. New release notes go here\n\n2.0.0 (2019-02-28)\n------------------\n\n* Drop Python 2 support, only Python 3.4+ is supported now.\n\n1.2.0 (2018-07-25)\n------------------\n\n* Ignore installed external (``-e``) packages.\n\n1.1.1 (2018-04-15)\n------------------\n\n* Fix for pip 10 move of import to ``pip._internal``\n\n1.1.0 (2016-08-18)\n------------------\n\n* Remove logic that made relative file paths relative to the path of the\n calling code's file. It's now the standard behaviour of relative to the\n current working directory. Passing an absolute path is recommended.\n* Make comparison of package names case-insensitive to work with\n ``requirements.txt`` files that use a different case to the canoncial package\n name. This can happen with ``pip-compile`` that always outputs lowercase\n names.\n* Fix 'mismatches' typo\n* Only indent mismatch list by 4 spaces in error message\n\n1.0.2 (2016-10-28)\n------------------\n\n* Fix relative paths for all environments\n\n1.0.1 (2016-10-28)\n------------------\n\n* Support relative requirements.txt paths\n\n1.0.0 (2016-10-27)\n------------------\n\n* First release on PyPI.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/adamchainz/pip-lock", "keywords": "pip,requirements", "license": "ISCL", "maintainer": "", "maintainer_email": "", "name": "pip-lock", "package_url": "https://pypi.org/project/pip-lock/", "platform": "", "project_url": "https://pypi.org/project/pip-lock/", "project_urls": { "Homepage": "https://github.com/adamchainz/pip-lock" }, "release_url": "https://pypi.org/project/pip-lock/2.0.0/", "requires_dist": null, "requires_python": ">=3.4", "summary": "Check for differences between requirements.txt files and your environment.", "version": "2.0.0" }, "last_serial": 4877548, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "d63d5ebe912f0d6bb1ca8467282f2231", "sha256": "b4de184fc8393fb00043759e8b629943abe89ecd06b3ad30864a71b413405379" }, "downloads": -1, "filename": "pip_lock-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d63d5ebe912f0d6bb1ca8467282f2231", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 4201, "upload_time": "2016-10-27T21:36:28", "url": "https://files.pythonhosted.org/packages/93/a7/c3daa36968a8a59888e4f799fcc1af9fdb2dd08f3a2f810fe3ff9a0eda83/pip_lock-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6302382048c553a41ba3ed028d8670a2", "sha256": "2b6f515979d02686eed9269343baa6ce10476cf77ae2c7a01576c7af7330a556" }, "downloads": -1, "filename": "pip-lock-1.0.0.tar.gz", "has_sig": false, "md5_digest": "6302382048c553a41ba3ed028d8670a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4712, "upload_time": "2016-10-27T21:36:25", "url": "https://files.pythonhosted.org/packages/da/47/24fb2e4d596ebe8580f0833937e6e77fdf6d05fcd88a31caca5a027a5726/pip-lock-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "5b1669e8c48d5d40e73a38bfdfa6a9b3", "sha256": "273f43dba54766e5c7794e1be913d288930d4a1be4a660278a7054c13bdb66fd" }, "downloads": -1, "filename": "pip_lock-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5b1669e8c48d5d40e73a38bfdfa6a9b3", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 4300, "upload_time": "2016-10-28T12:23:15", "url": "https://files.pythonhosted.org/packages/d1/18/ec0f43537f0dc0f01177b19c438b2e79b1b9a5fd3ced907e4365bf219d5c/pip_lock-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "45e6553be7c5fa575d82d279082dae62", "sha256": "a66e1d8bf2bc6cfbfd94f00e3f6c4fd5a137fcc9cfa1d5265be3f84231bd4012" }, "downloads": -1, "filename": "pip-lock-1.0.1.tar.gz", "has_sig": false, "md5_digest": "45e6553be7c5fa575d82d279082dae62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4837, "upload_time": "2016-10-28T12:23:08", "url": "https://files.pythonhosted.org/packages/a6/42/56ea1d354283feb97676f2051bfacaf130bbc7eeb5e7df2b3cde14745ecf/pip-lock-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "c5c0adde3b2a7456823c257c73a85866", "sha256": "9192c8c6c5b7f051b42389e494e425bfd161587c57b7476fa7be97098757827d" }, "downloads": -1, "filename": "pip_lock-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c5c0adde3b2a7456823c257c73a85866", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 4415, "upload_time": "2016-10-28T13:33:45", "url": "https://files.pythonhosted.org/packages/14/01/1b532ecb79157927e96d9676097f5244bdbe9ca3940f862637f30e079b22/pip_lock-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52125d6c5cbf224bf0e001bf30be73f3", "sha256": "1488d6a04108c40ab9f7b9f3f1b30e781a4098e1bb9f51ee6658499177f01cf3" }, "downloads": -1, "filename": "pip-lock-1.0.2.tar.gz", "has_sig": false, "md5_digest": "52125d6c5cbf224bf0e001bf30be73f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4957, "upload_time": "2016-10-28T13:33:43", "url": "https://files.pythonhosted.org/packages/b9/70/8c36bbe0442fdf8b7a941bea1cc75f286e7fff0dde0ed787a3707e3b680b/pip-lock-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "e3860218e0c26ee52347d5569cb16117", "sha256": "b4e8fb0931774d8e83a202dcd132a3b40e668b133b0ee294fd1b127252b7b0e5" }, "downloads": -1, "filename": "pip_lock-1.1.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "e3860218e0c26ee52347d5569cb16117", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6217, "upload_time": "2017-08-18T15:11:31", "url": "https://files.pythonhosted.org/packages/25/09/6a37cef52dc75e9df8aa1319c3ea344b04d4c826f982fa0c388993c2fd6a/pip_lock-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "00894de3d2be93c8d3fda79209110b70", "sha256": "454bfcaa6f8ace40da2dec4d000a05c10a34c5bb4cdc766a582ae29c29f9e1d1" }, "downloads": -1, "filename": "pip-lock-1.1.0.tar.gz", "has_sig": true, "md5_digest": "00894de3d2be93c8d3fda79209110b70", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5711, "upload_time": "2017-08-18T15:11:28", "url": "https://files.pythonhosted.org/packages/7e/db/36e7fc51d3d5b25cb14ef7988e876827a48dfe79374b9766cc0711835cd0/pip-lock-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "662975db5f3519f27bf0da1f875020de", "sha256": "ddf897d6bab932928d55750e9037184279a4ae1f396e247b89d306391311f345" }, "downloads": -1, "filename": "pip_lock-1.1.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "662975db5f3519f27bf0da1f875020de", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 7050, "upload_time": "2018-04-15T11:39:02", "url": "https://files.pythonhosted.org/packages/2f/80/9aa147bb76e898716a1012707bc04397b191901b52b9c035b90364729132/pip_lock-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "196a0acf98e974bf9c18a982ae2aeca0", "sha256": "90472652f823515e2f2eeed9f34bf131c3d0db5a69cc6299d41db183190ef28e" }, "downloads": -1, "filename": "pip-lock-1.1.1.tar.gz", "has_sig": true, "md5_digest": "196a0acf98e974bf9c18a982ae2aeca0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5841, "upload_time": "2018-04-15T11:39:00", "url": "https://files.pythonhosted.org/packages/38/c5/c1c4e750649ca9e48e01afb0b3c215abccbec4b749222c53769474e9f7f7/pip-lock-1.1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "418abaa5d9ddd21d5cca19f82122855a", "sha256": "1157557a0a5541bd79354b2bb71c3b6de20c54085b64e7f1da561b6c1a52f8a8" }, "downloads": -1, "filename": "pip_lock-1.2.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "418abaa5d9ddd21d5cca19f82122855a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 4672, "upload_time": "2018-07-25T19:55:08", "url": "https://files.pythonhosted.org/packages/d0/98/c59fbff8b856d2eb521a3846e9b84d2e42bd0e5c714c5a775beb34875516/pip_lock-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b1a893eddcb4d7ff1d9c3e1e92229b8", "sha256": "67894778aff0076f4a60625912f59db01f104a8af5eaed47dbe57320e13c01d0" }, "downloads": -1, "filename": "pip-lock-1.2.0.tar.gz", "has_sig": true, "md5_digest": "5b1a893eddcb4d7ff1d9c3e1e92229b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5960, "upload_time": "2018-07-25T19:55:06", "url": "https://files.pythonhosted.org/packages/1a/4a/dac61f37e2458b7a165a8f455f6b20fcad8166220bd2499eaedcd0365d32/pip-lock-1.2.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "a9b901aae0f3e75f02a44d4f3a3d5c7f", "sha256": "161bebcb5d19a55f096b7467ed09dc8f8b465c08916704d25500047575be0616" }, "downloads": -1, "filename": "pip_lock-2.0.0-py3-none-any.whl", "has_sig": true, "md5_digest": "a9b901aae0f3e75f02a44d4f3a3d5c7f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 4593, "upload_time": "2019-02-28T05:37:18", "url": "https://files.pythonhosted.org/packages/b8/1d/36cddf817157e3a72e64463b44d0a79b187a7dc3a47361968bc7d6d3ff27/pip_lock-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "365864bdae8d6e0274778cb12f5272e7", "sha256": "135cb58a1d098a1f5168265faa659680d3b734c324c42efe379923352a29cc01" }, "downloads": -1, "filename": "pip-lock-2.0.0.tar.gz", "has_sig": true, "md5_digest": "365864bdae8d6e0274778cb12f5272e7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 5883, "upload_time": "2019-02-28T05:37:20", "url": "https://files.pythonhosted.org/packages/67/8f/ba51131b5022b8b0b9d5834decb0da9d44bea8509e821b73f607b114f7c7/pip-lock-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a9b901aae0f3e75f02a44d4f3a3d5c7f", "sha256": "161bebcb5d19a55f096b7467ed09dc8f8b465c08916704d25500047575be0616" }, "downloads": -1, "filename": "pip_lock-2.0.0-py3-none-any.whl", "has_sig": true, "md5_digest": "a9b901aae0f3e75f02a44d4f3a3d5c7f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 4593, "upload_time": "2019-02-28T05:37:18", "url": "https://files.pythonhosted.org/packages/b8/1d/36cddf817157e3a72e64463b44d0a79b187a7dc3a47361968bc7d6d3ff27/pip_lock-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "365864bdae8d6e0274778cb12f5272e7", "sha256": "135cb58a1d098a1f5168265faa659680d3b734c324c42efe379923352a29cc01" }, "downloads": -1, "filename": "pip-lock-2.0.0.tar.gz", "has_sig": true, "md5_digest": "365864bdae8d6e0274778cb12f5272e7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 5883, "upload_time": "2019-02-28T05:37:20", "url": "https://files.pythonhosted.org/packages/67/8f/ba51131b5022b8b0b9d5834decb0da9d44bea8509e821b73f607b114f7c7/pip-lock-2.0.0.tar.gz" } ] }