{ "info": { "author": "Micha\u0142 Jaworski", "author_email": "swistakm@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "|PyPI|\n\nrequirements.txt\n================\n\nThis is a safeguard against typos when running\n``pip install -r requirements-dev.txt``. If you leave out the ``-r`` by\naccident, this package will cause your installation to abort.\n\n::\n\n $ pip install requirements-dev.txt\n Collecting requirements-dev.txt\n Installing collected packages: requirements-dev.txt\n Running setup.py install for requirements-dev.txt ... error\n Complete output from command:\n running install\n It looks like you meant to type `pip install -r requirements-dev.txt`,\n but you left out the `-r` by accident. Aborting installation.\n\nWhy?\n----\n\nIf we had no such package on PyPI, you could accidentally install a\npackage installed with the name of your requirements file. A malicious\nuser could register a package that would mimic proper installation\nprocess and also launch anny arbitrary code.\n\nPyPI (fortunately) does not allow ``requirements.txt`` as a package\nname, so that case is handled already. All forbidden package names that\nare `hardcoded in PyPI source\ncode `__\nare:\n\n- ``requirements.txt``\n- ``rrequirements.txt``\n- ``requirements-txt``\n- ``rrequirements-txt``\n\nBut it obviously does not cover all popular cases. This is why this\nsources are distributed on PyPI under few popular names that are not\nforbidden by PyPI:\n\n- ``requirements-dev.txt``\n- ``requirements-dev``\n- ``requirements-test.txt``\n- ``requirements-test``\n\nDid it ever happen?\n-------------------\n\nYeah. Typo squatting happens on PyPI from time to time. This project is\nthe best example of that. Previous version of ``requirements.txt``\nactually did something more than aborting its installation. It provided\na specially crafted ``setup.py`` script that could:\n\n- look on your filesystem to find a requirements file you intended to\n install\n- install all packages in another pip subprocess\n- display output that would mimick normal installation process\n\nNewer versions of pip completely swallow all output of package\ninstallation script but thih behavior can be easily bypassed - at least\non OS X and Linux. Also runtime version switch (to ``0.0.0``) allowed to\ninstall this package over and over becasue there was always newer\nversion available on PyPI. If something went wrong (especially on\nWindows) it resulted in crypting and rude error message.\n\nNothing harmful. Actually useful sometimes. At least in my personal\nopinion. Anyway my sense of usability and humour `was contested by some\npeople `__. This is\nwhy ``requirements.txt`` will longer install other packages and always\nexit with error code during installation. This is mostly thanks to\npull-request from @aanand and `his\npoints `__. I may not\nagree with all of them but I respect people's PRs.\n\nNevertheless, some additional messages may be displayed during\ninstallation attempt. You know... It was made for fun.\n\nIf you are interested in hacks included in previous version of this\npackage refer to ``contested-sense-of-humour`` branch or ``end-of-fun``\ntag in this project's\n`repository `__.\n\n.. |PyPI| image:: https://img.shields.io/badge/downloads-enough-ff69b4.svg\n :target: https://pypi.python.org/pypi?name=requirements-dev.txt", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/pylola/requirements.txt", "keywords": null, "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "requirements-dev.txt", "package_url": "https://pypi.org/project/requirements-dev.txt/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/requirements-dev.txt/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/pylola/requirements.txt" }, "release_url": "https://pypi.org/project/requirements-dev.txt/1.0.0/", "requires_dist": null, "requires_python": null, "summary": "Safeguard against one particullar \"pip install\" typo", "version": "1.0.0" }, "last_serial": 2086695, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "9c3809be79629132d7fc15816889b23e", "sha256": "8171450b7b4bb76c515e49fe6a03d501233828b39ed45382a0024381676fcad1" }, "downloads": -1, "filename": "requirements-dev.txt-0.0.1.tar.gz", "has_sig": false, "md5_digest": "9c3809be79629132d7fc15816889b23e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 918, "upload_time": "2016-01-25T12:17:07", "url": "https://files.pythonhosted.org/packages/86/31/c5f14c1d371bb60ef7738201139c0e81094340804dfcd42f8944857b431a/requirements-dev.txt-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "07fd59512d6bea892d3c32239e148ea0", "sha256": "4791df0953a93c9c46c56c3446eee0099c007b6d2f544dd7ab63df1091da7f2c" }, "downloads": -1, "filename": "requirements-dev.txt-0.0.2.tar.gz", "has_sig": false, "md5_digest": "07fd59512d6bea892d3c32239e148ea0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2176, "upload_time": "2016-01-25T12:22:17", "url": "https://files.pythonhosted.org/packages/e2/e0/6a9b182ef8e938939873003579d8a8f8f1af9368815de3ead4ee9504f3e6/requirements-dev.txt-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "6c57b0671b4eed9f05b0d178c06bc9d5", "sha256": "00b11719eba16447cfe613b4fb63da7a7bc0ab6357a3af5deed6447d8c2d8656" }, "downloads": -1, "filename": "requirements-dev.txt-0.0.3.tar.gz", "has_sig": false, "md5_digest": "6c57b0671b4eed9f05b0d178c06bc9d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2082, "upload_time": "2016-01-25T12:28:29", "url": "https://files.pythonhosted.org/packages/bd/cf/1862b0ef73b13c93635dc0ea483b45520debef09f805087197d17ae628df/requirements-dev.txt-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "1a1994071422998cdedfb44289b9469b", "sha256": "4dd7152715f27639bbe31fd708ab701a668ef97a4ea2ac7a2c063e204c2d0aef" }, "downloads": -1, "filename": "requirements-dev.txt-0.0.4.tar.gz", "has_sig": false, "md5_digest": "1a1994071422998cdedfb44289b9469b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2047, "upload_time": "2016-01-25T12:30:06", "url": "https://files.pythonhosted.org/packages/aa/ef/dad15e47fdb12cd74f14783134e871ce8df642a5701bd755c4f33a4e5567/requirements-dev.txt-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "f2fccb8ca921fb945be765f0a1194d31", "sha256": "37774a08d4e31949d2fd9da9570b840e645599a594ab8b418aad82d490bde188" }, "downloads": -1, "filename": "requirements-dev.txt-0.0.5.tar.gz", "has_sig": false, "md5_digest": "f2fccb8ca921fb945be765f0a1194d31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2637, "upload_time": "2016-01-25T13:12:17", "url": "https://files.pythonhosted.org/packages/0a/c6/0f44c37b99371cb0ee0280c7efa4ce864e3c016da7c6c613a94b3c85dd6a/requirements-dev.txt-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "8eb5954a5c36fa12dc63b8b5a9671a3b", "sha256": "0b1ed1bcffd7fd406e940c0ec8f7158440569a26a3a18cba6769b569ef85158b" }, "downloads": -1, "filename": "requirements-dev.txt-0.0.6.tar.gz", "has_sig": false, "md5_digest": "8eb5954a5c36fa12dc63b8b5a9671a3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2806, "upload_time": "2016-01-25T13:37:27", "url": "https://files.pythonhosted.org/packages/27/7c/6d25de37101588a31739cb350c7f0992c026ae3e67e676b5350e566d450f/requirements-dev.txt-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "9fe2acdb7fc25bef27afd30ad77770bd", "sha256": "0c14c7c7e945c1a80140cec79170cb87cde34fcc70f742e2f8141e8eba046966" }, "downloads": -1, "filename": "requirements-dev.txt-0.0.7.tar.gz", "has_sig": false, "md5_digest": "9fe2acdb7fc25bef27afd30ad77770bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2923, "upload_time": "2016-01-25T16:37:39", "url": "https://files.pythonhosted.org/packages/87/1f/8c2cded28f326813bcc746e2d63c1b2e78d0172d436789f7be15a90462a0/requirements-dev.txt-0.0.7.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "2adc5bf1f9a6eb790493dfeccd9ff66f", "sha256": "8d27bf5ca8e3c4c0284a0c96a68f4ca3f22a2ae96a15e583b4ad1fc266c49d0d" }, "downloads": -1, "filename": "requirements-dev.txt-1.0.0.tar.gz", "has_sig": false, "md5_digest": "2adc5bf1f9a6eb790493dfeccd9ff66f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3379, "upload_time": "2016-04-27T11:08:14", "url": "https://files.pythonhosted.org/packages/5f/49/65899d01eff77ae3c4b1fcb84b3132d1ce95db6fc5b99a14d28c433dab08/requirements-dev.txt-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2adc5bf1f9a6eb790493dfeccd9ff66f", "sha256": "8d27bf5ca8e3c4c0284a0c96a68f4ca3f22a2ae96a15e583b4ad1fc266c49d0d" }, "downloads": -1, "filename": "requirements-dev.txt-1.0.0.tar.gz", "has_sig": false, "md5_digest": "2adc5bf1f9a6eb790493dfeccd9ff66f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3379, "upload_time": "2016-04-27T11:08:14", "url": "https://files.pythonhosted.org/packages/5f/49/65899d01eff77ae3c4b1fcb84b3132d1ce95db6fc5b99a14d28c433dab08/requirements-dev.txt-1.0.0.tar.gz" } ] }