{ "info": { "author": "Ben Bass", "author_email": "benbass@codedstructure.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Utilities" ], "description": "Path Overrides\n==============\n\nDetects executables which 'override' other executables in the system PATH.\n\nInstall\n-------\n\n``path_overrides`` has been tested on recent OS X and Linux systems. It should work on any POSIX system.\n\nTo install, simply run::\n\n $ pip install --user path_overrides\n\nor similar. Installing the Python package ``blessings`` is recommended to provide colourised output, but is not required.\n\nUse\n---\n\nRun ``path_overrides``. It will display a list of which executables shadow other (different) executables.\n\nMotivation\n----------\n\nIf I press the 'tab' key a couple of times on a recent Linux or OS X shell, I get a prompt looking something like::\n\n Display all 2228 possibilities? (y or n)\n\nThere are over 2000 commands all ready and waiting to be run at a single word being entered. And these don't all live in one place; they live in a (typically small) number of different locations, which are listed in the ``PATH`` environment variable. ``PATH`` is an ordered sequence of paths which are searched to find an executable which will be run. This works well for the most part, but as with all things where there isn't a single namespace, collisions happen. There could be a number of items all with the same name living in different paths all in ``PATH``. In normal use this isn't a problem; ``PATH`` is ordered, and each part of it is a unique no-collisions-possible directory. There is never non-determinism about which executable will 'win', and the ``which`` shell program will report on 'which' path has precedence.\n\nHowever, unless you are in the habit of regularly running ``which`` before executing any command - or only ever run commands with absolute pathnames - there can be surprises; if someone places a executable earlier in the ``PATH`` than the one you would expect to be run, it will take precendence. ``path_overrides`` will report on any command which overrides a *different* command later in the ``PATH``. Note it's quite common to have symlinks from (e.g.) ``/usr/bin`` to programs in ``/bin``; since they represent 'the same command', ``path_overrides`` will ignore these.\n\nExample\n-------\n\nThis is a run of ``path_overrides`` on an OS X machine, currently working in a virtualenv. If ``blessings`` is installed, the output will be colourised.\n\n::\n\n ben$ path_overrides \n /Users/ben/.virtualenvs/path_overrides/bin/python overrides /usr/bin/python\n /Users/ben/.virtualenvs/path_overrides/bin/easy_install overrides /usr/bin/easy_install\n /Users/ben/.virtualenvs/path_overrides/bin/python2.7 (python) overrides /usr/bin/python2.7 (../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7)\n /Users/ben/.virtualenvs/path_overrides/bin/easy_install-2.7 overrides /usr/bin/easy_install-2.7\n /Users/ben/.virtualenvs/path_overrides/bin/pip overrides /usr/local/bin/pip\n /Library/Frameworks/Python.framework/Versions/3.4/bin/2to3 (2to3-3.4) overrides /usr/bin/2to3\n /usr/bin/ndisasm overrides /usr/local/bin/ndisasm (../Cellar/nasm/2.11.02/bin/ndisasm)\n /usr/bin/2to3 overrides /usr/local/bin/2to3 (../../../Library/Frameworks/Python.framework/Versions/3.4/bin/2to3)\n /usr/bin/nasm overrides /usr/local/bin/nasm (../Cellar/nasm/2.11.02/bin/nasm)\n /usr/local/bin/libpng-config (../Cellar/libpng/1.6.10/bin/libpng-config) overrides /opt/X11/bin/libpng-config (libpng15-config)\n /usr/local/bin/fc-match (../Cellar/fontconfig/2.11.1/bin/fc-match) overrides /opt/X11/bin/fc-match\n /usr/local/bin/fc-list (../Cellar/fontconfig/2.11.1/bin/fc-list) overrides /opt/X11/bin/fc-list\n /usr/local/bin/fc-cat (../Cellar/fontconfig/2.11.1/bin/fc-cat) overrides /opt/X11/bin/fc-cat\n /usr/local/bin/fc-cache (../Cellar/fontconfig/2.11.1/bin/fc-cache) overrides /opt/X11/bin/fc-cache\n /usr/local/bin/fc-scan (../Cellar/fontconfig/2.11.1/bin/fc-scan) overrides /opt/X11/bin/fc-scan\n /usr/local/bin/freetype-config (../Cellar/freetype/2.5.3_1/bin/freetype-config) overrides /opt/X11/bin/freetype-config\n /usr/local/bin/fc-validate (../Cellar/fontconfig/2.11.1/bin/fc-validate) overrides /opt/X11/bin/fc-validate\n /usr/local/bin/fc-query (../Cellar/fontconfig/2.11.1/bin/fc-query) overrides /opt/X11/bin/fc-query\n /usr/local/bin/fc-pattern (../Cellar/fontconfig/2.11.1/bin/fc-pattern) overrides /opt/X11/bin/fc-pattern\n\nOptions\n-------\n\nIn most cases ``path_overrides`` does not require any options to be provided, but some exist for occasions such as checking the PATH within an alternate root (e.g. when building an alternate chroot filesystem).\n\nIn this case, an explicit PATH can be provided as an argument to the `--path` argument. An alternate to the default PATH separator (e.g. ':' on POSIX systems, ';' on Windows) can also be provided via the `--path-sep` argument. Finally, a `--root-dir` path can be specified which all PATH elements will be considered to be local to. Note that the `--root-dir` value will not be included in the output which ``path_overrides`` gives; it is assumed that the calling program / user is aware of this and the more concise information is preferable.\n\nThe following example shows the use of all these options::\n\n $ mkdir -p ~/bin ~/sbin\n $ touch ~/bin/{x,y} ~/sbin/{x,y}\n $ chmod +x ~/bin/{x,y} ~/sbin/{x,y}\n $ path_overrides --path-sep=' ' --path='/bin /sbin' --root-dir='~'\n /bin/y overrides /sbin/y\n /bin/x overrides /sbin/x\n\n\nHelp\n----\n\nHelp is obtained with the `--help` argument; the version of ``path_overrides`` is reported with `--version`::\n\n\n Usage: path_overrides [-h] [--version] [-p PATH] [--path-sep PATH_SEP]\n [--root-dir ROOT_DIR]\n\n Display executables in the PATH which override other (different) programs\n later in the PATH\n\n optional arguments:\n -h, --help show this help message and exit\n --version show program's version number and exit\n -p PATH, --path PATH provide custom PATH value directly rather than from\n environment\n --path-sep PATH_SEP path separator; defaults to system default\n --root-dir ROOT_DIR assumed root of PATH if given\n\n\n@codedstructure 2014-2015", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://bitbucket.org/codedstructure/path_overrides", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "path_overrides", "package_url": "https://pypi.org/project/path_overrides/", "platform": "any", "project_url": "https://pypi.org/project/path_overrides/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://bitbucket.org/codedstructure/path_overrides" }, "release_url": "https://pypi.org/project/path_overrides/0.2/", "requires_dist": null, "requires_python": null, "summary": "Show executables overriding others with current PATH config", "version": "0.2" }, "last_serial": 1410051, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "94f7dc7e136f903f16e8ce4e693a8e3d", "sha256": "68b1adc2d30c596439c27fe93c7a174c4bb70ded7627f4652598a4cae5cd8732" }, "downloads": -1, "filename": "path_overrides-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "94f7dc7e136f903f16e8ce4e693a8e3d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6379, "upload_time": "2014-06-01T20:23:00", "url": "https://files.pythonhosted.org/packages/18/48/f81092723b7afde171275daba62f4cdd3d8f9cbb9ae7c1439cba6f4da3a4/path_overrides-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cbbff85d1349f7497ffd71d2139d2ab9", "sha256": "2839fba8b60b9c04dffbeffb992275f6f0c994b9257a91b0aa0fb2d747810101" }, "downloads": -1, "filename": "path_overrides-0.1.tar.gz", "has_sig": false, "md5_digest": "cbbff85d1349f7497ffd71d2139d2ab9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3734, "upload_time": "2014-06-01T20:22:58", "url": "https://files.pythonhosted.org/packages/49/e3/b7bb91eef157a47dbcc353e8cc037a79cc5bc550e0fbd6350965458eb04d/path_overrides-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "21b7d301697d34c366a85c85c56b23f0", "sha256": "474bb0992b63f5321fd9bb227acc3d3b0ee3a6c12c3394d05f8211a81ff6cb82" }, "downloads": -1, "filename": "path_overrides-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "21b7d301697d34c366a85c85c56b23f0", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6578, "upload_time": "2014-06-01T20:43:31", "url": "https://files.pythonhosted.org/packages/b9/2e/e392898f70ba6ff5df86bd434a41a73c9a2816ee1f79c54af8600c94e1f9/path_overrides-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f90039fc312c2188fc4761434b4fb461", "sha256": "ec94334404adddbce410d371b29c2296a660937bed2e9a1f17473f53d6a26a4c" }, "downloads": -1, "filename": "path_overrides-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f90039fc312c2188fc4761434b4fb461", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3840, "upload_time": "2014-06-01T20:43:28", "url": "https://files.pythonhosted.org/packages/71/32/c6755081d76d1ff3a076c7c0c7eb05a3f79133047245983bb01cf166fd29/path_overrides-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "72f854b125d2bcba825b58d89ad3fcd7", "sha256": "b5ee07432f57a92cc905cbbbca0f827b3b1518453ead7a1e417550e3a60351c4" }, "downloads": -1, "filename": "path_overrides-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "72f854b125d2bcba825b58d89ad3fcd7", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6808, "upload_time": "2014-06-02T20:58:01", "url": "https://files.pythonhosted.org/packages/10/52/33fe265d83839961a1d93247f46adead7afa48d33cf0abe14624dc2d2501/path_overrides-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "99c17a80ea1be51aa5a68502d98d9c11", "sha256": "76895547a5036cd723c315cebd37e47a90f8498ec489239ad38c18386843f039" }, "downloads": -1, "filename": "path_overrides-0.1.2.tar.gz", "has_sig": false, "md5_digest": "99c17a80ea1be51aa5a68502d98d9c11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4812, "upload_time": "2014-06-02T20:57:59", "url": "https://files.pythonhosted.org/packages/94/5b/504170b0e25379b7b5755e2cce9ed2f1f60433fb4717e5ba5ae818e98481/path_overrides-0.1.2.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "34c04528e1ec15707d638c976080d30f", "sha256": "286b5a3868cb38f9baecae9b8b2734ea238013e61bd6e6f28ac300c0f3abc5fa" }, "downloads": -1, "filename": "path_overrides-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "34c04528e1ec15707d638c976080d30f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8962, "upload_time": "2015-02-04T23:54:50", "url": "https://files.pythonhosted.org/packages/48/64/dcbc857de1d493d6495579941ac0023e5e6988590b8d6aea9951f140d8d3/path_overrides-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bac9cd9f2ea07df6c70ae16c380bffd7", "sha256": "aec14c1dd8c19aaba2604a0de1eaf8795a7d03ff8bb118e4be6ed2496db6b7ac" }, "downloads": -1, "filename": "path_overrides-0.2.tar.gz", "has_sig": false, "md5_digest": "bac9cd9f2ea07df6c70ae16c380bffd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6274, "upload_time": "2015-02-04T23:54:47", "url": "https://files.pythonhosted.org/packages/ee/ba/c7c112db3b0ff8d7abb8c85c432f725105194d00e6ff6530f3a83ea7e310/path_overrides-0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "34c04528e1ec15707d638c976080d30f", "sha256": "286b5a3868cb38f9baecae9b8b2734ea238013e61bd6e6f28ac300c0f3abc5fa" }, "downloads": -1, "filename": "path_overrides-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "34c04528e1ec15707d638c976080d30f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8962, "upload_time": "2015-02-04T23:54:50", "url": "https://files.pythonhosted.org/packages/48/64/dcbc857de1d493d6495579941ac0023e5e6988590b8d6aea9951f140d8d3/path_overrides-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bac9cd9f2ea07df6c70ae16c380bffd7", "sha256": "aec14c1dd8c19aaba2604a0de1eaf8795a7d03ff8bb118e4be6ed2496db6b7ac" }, "downloads": -1, "filename": "path_overrides-0.2.tar.gz", "has_sig": false, "md5_digest": "bac9cd9f2ea07df6c70ae16c380bffd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6274, "upload_time": "2015-02-04T23:54:47", "url": "https://files.pythonhosted.org/packages/ee/ba/c7c112db3b0ff8d7abb8c85c432f725105194d00e6ff6530f3a83ea7e310/path_overrides-0.2.tar.gz" } ] }