{ "info": { "author": "Robbie Clarken", "author_email": "robert.clarken@reece.com.au", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries", "Topic :: Utilities" ], "description": "# update-req-spec\n\n[![Build Status](https://travis-ci.org/RobbieClarken/update-req-spec.svg?branch=master)](https://travis-ci.org/RobbieClarken/update-req-spec)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/RobbieClarken/update-req-spec/blob/master/LICENSE)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n\nUpdate Python requirements in a setup.py file to permit latest available versions.\n\n## Motivation\n\nYou wish to cap the versions of the dependencies in your library to the major versions\nthat are currently released since you have tested your library against these versions and, given\neveryone follows semantic versioning, minor updates should remain compatible. But keeping these\nversion ranges up to date with new major releases can be tedious.\n\n`update-req-spec` makes this a little easier by updating the `install_requirements` in your\n`setup.py` so that the version specifications allow the latest major releases while retaining the\nminimum permitted versions. Then all you need to do is run your tests and publish a new release.\n\nFor example, given:\n\n```python\nfrom setuptools import setup\n\nsetup(\n # --- snip ---\n install_requires=[\n \"requests\",\n \"Click>=6.1\",\n \"attrs~=18.1\",\n ],\n # --- snip ---\n)\n```\n\nwill be transformed to:\n\n```python\nfrom setuptools import setup\n\nsetup(\n # --- snip ---\n install_requires=[\n \"requests<3\",\n \"Click>=6.1,<8\",\n \"attrs>=18.1,<19\",\n ],\n # --- snip ---\n)\n```\n\n## Installation\n\nInstall with [pipsi](https://github.com/mitsuhiko/pipsi):\n\n```bash\npipsi install update-req-sepc\n```\n\nor with pip:\n\n```bash\npython3 -m pip install update-req-spec\n```\n\n## Usage\n\n```bash\nupdate-req-spec setup.py\n```\n\nIf you use a private packge repository:\n\n```bash\nupdate-req-spec --index-url http://private-repo.example/ setup.py\n\n# or\n\nexport PIP_INDEX_URL=http://private-repo.example/\nupdate-req-spec setup.py\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/RobbieClarken/update-req-spec", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "update-req-spec", "package_url": "https://pypi.org/project/update-req-spec/", "platform": "", "project_url": "https://pypi.org/project/update-req-spec/", "project_urls": { "Homepage": "https://github.com/RobbieClarken/update-req-spec" }, "release_url": "https://pypi.org/project/update-req-spec/1.0.2/", "requires_dist": [ "click", "pip-tools" ], "requires_python": "", "summary": "Update Python requirements in a setup.py file to permit latest available versions", "version": "1.0.2" }, "last_serial": 4805692, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "3cc3063104b0436b8ff7485dc18b8f94", "sha256": "019a0d2e898b65005f1c197e9b26163d221a71bf9f8b969a32c1b71b2365496d" }, "downloads": -1, "filename": "update_req_spec-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3cc3063104b0436b8ff7485dc18b8f94", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4824, "upload_time": "2019-02-11T11:32:38", "url": "https://files.pythonhosted.org/packages/a1/78/54f1fef1509a22be01338a564d8622b1163e043f471b06c1d5eaa1820cb7/update_req_spec-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6be1d81ff6cbbdd4a47c1d0f5f59825f", "sha256": "de42d8ec8b4bc04911fbb0c0ae8515de9a5f0f7661796142041e42205bd484cc" }, "downloads": -1, "filename": "update-req-spec-1.0.0.tar.gz", "has_sig": false, "md5_digest": "6be1d81ff6cbbdd4a47c1d0f5f59825f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3660, "upload_time": "2019-02-11T11:32:40", "url": "https://files.pythonhosted.org/packages/93/93/8e649708919f54167e18cd09e4dc31c15b5f70b5ebe03fbb8ecb6883e60d/update-req-spec-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "b3d1a8f6408b4c1a02341e20d959997e", "sha256": "5e61a68044cd5590526bb5778b1095e9da7e91698c967b696536e7bb03780655" }, "downloads": -1, "filename": "update_req_spec-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b3d1a8f6408b4c1a02341e20d959997e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5489, "upload_time": "2019-02-11T11:44:06", "url": "https://files.pythonhosted.org/packages/ed/d5/c0c5ea86a66b35046f819a1ee170650c5fd8782543c30881680921f7ccc2/update_req_spec-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c9bd47abcdc49f5e5bf703ea4cf4b28a", "sha256": "853955928a9a47f2938854340aae20d04837fbe1fef59fd68caad4413a790679" }, "downloads": -1, "filename": "update-req-spec-1.0.1.tar.gz", "has_sig": false, "md5_digest": "c9bd47abcdc49f5e5bf703ea4cf4b28a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4013, "upload_time": "2019-02-11T11:44:07", "url": "https://files.pythonhosted.org/packages/5c/9e/33281f4d1ff764770c763bba0e39c40bf72116ac61244df109da4888538d/update-req-spec-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "0d36c88125359c7dcdf16680f7a33207", "sha256": "170100ff6f38cdea44843379d212fa23245393e0d5dd07b65611c8598b8cb91d" }, "downloads": -1, "filename": "update_req_spec-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0d36c88125359c7dcdf16680f7a33207", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6520, "upload_time": "2019-02-11T12:11:04", "url": "https://files.pythonhosted.org/packages/8e/90/5a2be03da39c8b64f65d89a622ff2a12d37692c47bbd97b756f025fc6c6b/update_req_spec-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f8e1a650667247330fd51e8acd19fd5d", "sha256": "55a9dd66b8434af568a40c30d7a06a5dc6f3a8e401812ab70a8c630246fdf2a4" }, "downloads": -1, "filename": "update-req-spec-1.0.2.tar.gz", "has_sig": false, "md5_digest": "f8e1a650667247330fd51e8acd19fd5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4869, "upload_time": "2019-02-11T12:11:06", "url": "https://files.pythonhosted.org/packages/cf/cf/e6efab9f7226a47751dddbc81d3ba1bb3c8ab468271c36cd849b9003d320/update-req-spec-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0d36c88125359c7dcdf16680f7a33207", "sha256": "170100ff6f38cdea44843379d212fa23245393e0d5dd07b65611c8598b8cb91d" }, "downloads": -1, "filename": "update_req_spec-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0d36c88125359c7dcdf16680f7a33207", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6520, "upload_time": "2019-02-11T12:11:04", "url": "https://files.pythonhosted.org/packages/8e/90/5a2be03da39c8b64f65d89a622ff2a12d37692c47bbd97b756f025fc6c6b/update_req_spec-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f8e1a650667247330fd51e8acd19fd5d", "sha256": "55a9dd66b8434af568a40c30d7a06a5dc6f3a8e401812ab70a8c630246fdf2a4" }, "downloads": -1, "filename": "update-req-spec-1.0.2.tar.gz", "has_sig": false, "md5_digest": "f8e1a650667247330fd51e8acd19fd5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4869, "upload_time": "2019-02-11T12:11:06", "url": "https://files.pythonhosted.org/packages/cf/cf/e6efab9f7226a47751dddbc81d3ba1bb3c8ab468271c36cd849b9003d320/update-req-spec-1.0.2.tar.gz" } ] }