{ "info": { "author": "Shaun Viguerie", "author_email": "shaunvig114@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "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", "Topic :: System :: Shells", "Topic :: System :: System Shells" ], "description": "# envy [![Build Status](https://travis-ci.org/shaunvxc/envy.svg?branch=master)](https://travis-ci.org/shaunvxc/envy) [![PyPI version](https://badge.fury.io/py/envy.svg)](https://badge.fury.io/py/envy)\n\n### Why?\n\nEver needed to look at some code living in one of your virtual environments? And then spent a good 3 or 4 seconds typing out the path? At which point you were weary about making changes/setting breakpoints in your site-packages without first creating a backup... which then needed to be restored again after testing, and yada yada yada. *This workflow is annoying and tedious*.\n\n`envy` is a utility that allows you to ****safely**** **interact with all of the site-packages** in your currently active `virtualenv` as if they were in your **current working directory.**\n\n![envy_best5](https://cloud.githubusercontent.com/assets/3979753/13486757/df564a3a-e0e1-11e5-9e48-666fb658f6f4.gif)\n\n### How?\nLet's say you are working in a virtual environment for a project `foo` but are getting errors thrown from one of `foo`'s depedencies-- a library called `bar`. The stacktrace tells us the error was thrown from `baz.py`. Using `envy`, simply run (from anywhere in your file system):\n\n`(foo)$ envy edit bar/baz.py`\n\nand you'll instantly be looking at the point-of-error from your favorite text editor!\n\n##### Great, the file is open, but I shouldn't create a backup before editing a file in my site-packages? :confused:\nThis is a good practice, but with `envy`, there is no need! Before launching the editor, `envy` first creates a backup of the package in `~/.envies/foo/bar`. \n\nEnvironment safe from corruption, you can confidentally throw down some `pdb` breakpoints, `print` statements, or any little hack you want! Whenever you are ready to **restore the package back to it's original state**, you need only run:\n\n`(foo)$ envy clean bar`\n\nAnd it'll be like you were never there!\n\n### Wait, there's more! :pig2: :egg:\n\nSay you maintain a library `ham`, as well as another project `eggs` that depends on `ham`. You want to test out some of your recent changes to `ham`, but are far from ready to start messing with the versioning or running `setup.py install`. With `envy` you can very quickly sync the changes from your local dev copy of `ham` to the one that lives `eggs` virtual environment like so:\n\n`(eggs)$ envy sync ham`\n\nYou can also sync indivual files:\n\n`(eggs)$ envy sync ham/spam.py`\n\n***Note:*** `envy sync` commands must be run from within your local copy of the package you are syncing (i.e. `ham`)\n\nAs with `envy edit`, an backup of the package's (`ham`'s) state will be created automatically. As with before, to restore the original state:\n\n`(eggs)$ envy clean ham`\n\n## No talk, straight usage :no_mouth:\n\n####Edit any file from any site-package installed in your active virtual environment:\n\n`(active-virtualenv)$ envy edit any-site-package/any-file.py`\n\n####Discard any and all edits and return `any-site-package` to its original state:\n\n`(active-virtualenv)$ envy clean any-site-package`\n\nYou can run both `edit` and `clean` from anywhere in your filesystem, as long as you are in a virtualenv that contains the package you ask it for.\n\n####Restore all edited packages to their original state:\n\n`(active-virtualenv)$ envy clean --all`\n\n####Sync all local changes from `random_lib` to where it lives in `some-virtualenv`:\n\n`(some-virtualenv):dev/random_lib$ envy sync random_lib`\n\nFor the time being, `sync` commands cannot be run as flexibly as `edit` and `clean` (they will only work when run from within the python package you wish to sync)- although it would certainly be possible to improve this in the future.\n\n####View the differences between the current copy of a package and its backed up (clean) copy:\n\n`(some-virtualenv):$ envy diff package`\n\n***Note:***\n`envy edit` uses the `$EDITOR` environment varible to launch a text editor-- if this is not set, simply add:\n\n`export EDITOR=your_editor_of_choice`\n\nto your `.bashrc` file.\n\n##Installation\n`$ pip install envy`\n\nFor manual installation:\n```shell\n$ git clone https://github.com/shaunvxc/envy.git\n$ cd envy\n$ python setup.py install\n```\n\n##Future work:\n- add a `envy diff` function to compare currently applied changes with the clean, backed-up copy\n- Explore the option of packaging in a diff. format (installation with `curl`), in order for it to be available globally (rather than on a per `virtualenv` basis)\n- handle egg-named locally built packages? or enforce local building with pip instead?\n- allow `sync` to be run from anywhere on filesystem (would likely require an env-var like `$DEV_SRC`)\n- improve test coverage\n- add optional virtualenv argument to allow syncing/editing to nonactive virtualenvs\n\n## Contributing\n1. Fork it ( https://github.com/shaunvxc/envy/fork )\n1. Create your feature branch (`git checkout -b new-feature`)\n1. Commit your changes (`git commit -am 'Add some feature'`)\n1. Run the tests (`make test`)\n1. Push change to the branch (`git push origin new-feature`)\n1. Create a Pull Request\n\n\n\n", "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/shaunvxc/envy", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "envy", "package_url": "https://pypi.org/project/envy/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/envy/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/shaunvxc/envy" }, "release_url": "https://pypi.org/project/envy/0.2.0/", "requires_dist": null, "requires_python": null, "summary": "safely and easily debug files deep in python virtualenvs", "version": "0.2.0" }, "last_serial": 2219405, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "765ff7aa173826adee0f733e3538d2b4", "sha256": "9e9e81c8b562cdd5ffb6f29204e40882a7df30a6489d8c32e6c76f14c3ca9c24" }, "downloads": -1, "filename": "envy-0.0.1.tar.gz", "has_sig": false, "md5_digest": "765ff7aa173826adee0f733e3538d2b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2702, "upload_time": "2016-02-19T19:29:29", "url": "https://files.pythonhosted.org/packages/ca/1b/6131d97ddef83694b334980729e0d8c9a742d0960cc209e115a7e7a01189/envy-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "e6e5f6bdfa3df142bd0f3d30fec24cc9", "sha256": "8eebaac42a418bf232eceee90fa8169f0ab105855614116786b70e65fed5d4b5" }, "downloads": -1, "filename": "envy-0.0.10.tar.gz", "has_sig": false, "md5_digest": "e6e5f6bdfa3df142bd0f3d30fec24cc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8274, "upload_time": "2016-04-02T20:16:42", "url": "https://files.pythonhosted.org/packages/51/ca/5986202a0e326dca9debe46b4bbc9f0b8a024aca948337a505b278a06776/envy-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "e89e19fd299b0c99bdcf6dfd72442b7c", "sha256": "4bf0da229b303ad5bd8ed0abea5ce616704aa1f0d64765cb38272ea0cd04e39b" }, "downloads": -1, "filename": "envy-0.0.11.tar.gz", "has_sig": false, "md5_digest": "e89e19fd299b0c99bdcf6dfd72442b7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8761, "upload_time": "2016-04-24T01:56:21", "url": "https://files.pythonhosted.org/packages/2f/a6/d644a151dceb8be6dbff7be82139c8317e707c464d3bc51c99600417bb5c/envy-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "35ba0431b5c8681fbeb4e2189266872e", "sha256": "064ee1773c590a3fcd886a4be72727f810247d6bbd3271fe02cd63022f3faf01" }, "downloads": -1, "filename": "envy-0.0.12.tar.gz", "has_sig": false, "md5_digest": "35ba0431b5c8681fbeb4e2189266872e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8760, "upload_time": "2016-04-24T01:58:15", "url": "https://files.pythonhosted.org/packages/85/f7/a3df4d671aa3bd9fa3cd9b4f50c443f1d4fd55416e43f7479d9e8199b190/envy-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "1888b236cb52dc1682c4cf8cb0e48fc1", "sha256": "56b6fcf965eb310819cf26401b2a39de9d0ed53a50a81c960536b47e03d3e02f" }, "downloads": -1, "filename": "envy-0.0.13.tar.gz", "has_sig": false, "md5_digest": "1888b236cb52dc1682c4cf8cb0e48fc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8870, "upload_time": "2016-05-24T20:59:53", "url": "https://files.pythonhosted.org/packages/04/95/5ddfbba74d47043e10440ea1b2b3e07655db6bf589182a9c9a73d88be415/envy-0.0.13.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "e25db408112ca56056190e95512d93e4", "sha256": "6981080e4fb17a9b98d42e4e3df8b81f0f6f100886d24e491f17b4f7b283a983" }, "downloads": -1, "filename": "envy-0.0.2.tar.gz", "has_sig": false, "md5_digest": "e25db408112ca56056190e95512d93e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4326, "upload_time": "2016-02-19T23:56:37", "url": "https://files.pythonhosted.org/packages/08/63/b775c3faa2a270c78fd19039ae6240408a7f12acffc2ba118d8e996d8015/envy-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "de37c215a56eca4d499f35914ec2fe2b", "sha256": "a52db0f833241ccee961dee7cf584e02338a9f81134bf8cf756196d1419ebe91" }, "downloads": -1, "filename": "envy-0.0.3.tar.gz", "has_sig": false, "md5_digest": "de37c215a56eca4d499f35914ec2fe2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5980, "upload_time": "2016-02-22T04:02:18", "url": "https://files.pythonhosted.org/packages/ee/af/a5af2bb0e9e773807eadd0e46e29ce4060bcf54c796f6e42d2e35b0e345e/envy-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "1958ac0cf26db26ea3458d652352b6c4", "sha256": "1c5b43179191a983a557ef01eeb4e1f2a73b69e280050ae3dbc6b86e5f1fe41d" }, "downloads": -1, "filename": "envy-0.0.4.tar.gz", "has_sig": false, "md5_digest": "1958ac0cf26db26ea3458d652352b6c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6275, "upload_time": "2016-02-22T06:24:33", "url": "https://files.pythonhosted.org/packages/a3/ee/4c1dac66c736b7c4168150a70ed008f71fc87c1ededb325f76125ff42ed8/envy-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "323e6fb3117b24b04ad936628afd6c64", "sha256": "1ace886b69295f8d9d61a9d897f854931ab6cd2cf639614464e89f12b1f7c540" }, "downloads": -1, "filename": "envy-0.0.5.tar.gz", "has_sig": false, "md5_digest": "323e6fb3117b24b04ad936628afd6c64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7418, "upload_time": "2016-02-24T07:26:12", "url": "https://files.pythonhosted.org/packages/a6/ee/1965bb954377e22f1763c270bfb11549835689d73be76c148c1d859cda8d/envy-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "3c5e174d612ae88174616e05d8bb8237", "sha256": "d31b4aed8350903a2a04dc3b0d612a257835c14c1c71551bd669bd6d2b7ff8fa" }, "downloads": -1, "filename": "envy-0.0.6.tar.gz", "has_sig": false, "md5_digest": "3c5e174d612ae88174616e05d8bb8237", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7675, "upload_time": "2016-02-25T06:07:59", "url": "https://files.pythonhosted.org/packages/0c/4f/795d3854e163dc1fb9d62de6a8db385759b329219dbea520ecc6c64ac138/envy-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "e800f93baba54685dbc78ab6b7a8cb56", "sha256": "73b1dd94ac8b0dfb3c02be09dc24da6d637afcb852bd3b7ac741b18ea0568e53" }, "downloads": -1, "filename": "envy-0.0.7.tar.gz", "has_sig": false, "md5_digest": "e800f93baba54685dbc78ab6b7a8cb56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7906, "upload_time": "2016-02-29T17:12:19", "url": "https://files.pythonhosted.org/packages/2f/01/0bfe4c0983305537a8cbc2af3d29e336cef8369cb73efec7a8db8d39e42b/envy-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "3b7071d79d3c21cf8c6bc684bdd04acd", "sha256": "55370e8266abcea801cb6a21ad26661164f756d73c53f25667e68f117123e535" }, "downloads": -1, "filename": "envy-0.0.8.tar.gz", "has_sig": false, "md5_digest": "3b7071d79d3c21cf8c6bc684bdd04acd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8173, "upload_time": "2016-03-19T01:33:29", "url": "https://files.pythonhosted.org/packages/8e/60/b4051d0dbd355c78365ede067aa38b262d8d22fae6dc9412f3284be8af75/envy-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "c463c3b11210e07972fece2d4a52fc11", "sha256": "88aecdbf7ea70153fa927a02c5e38f2a0e55a7c7cd871303be562593cf7d24d8" }, "downloads": -1, "filename": "envy-0.0.9.tar.gz", "has_sig": false, "md5_digest": "c463c3b11210e07972fece2d4a52fc11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8144, "upload_time": "2016-03-22T17:22:23", "url": "https://files.pythonhosted.org/packages/cc/b1/9f22fcb0271814ccf91d1c2f9f773e2ef428ce4a0fcaec011c451c761a7a/envy-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "9c15bd1b88c0859b0fc7df7d888b4570", "sha256": "2a0b37bb50c619490b65c74942c9d1aac8ce6902ab8d6e1fe8bd8de7a96ae7ea" }, "downloads": -1, "filename": "envy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9c15bd1b88c0859b0fc7df7d888b4570", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8972, "upload_time": "2016-06-11T18:57:36", "url": "https://files.pythonhosted.org/packages/70/8d/cc860d8490d09bfc4cb2088a92178fca85bf6c2c6b726e705699a1b3e792/envy-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "6ad749ce665677e77f5093391720b116", "sha256": "e691b50d50be13e22fd7f1ea582403c6f773eeb963c3be22cab28d9f325c27ce" }, "downloads": -1, "filename": "envy-0.2.0.tar.gz", "has_sig": false, "md5_digest": "6ad749ce665677e77f5093391720b116", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9376, "upload_time": "2016-07-13T18:55:02", "url": "https://files.pythonhosted.org/packages/8a/76/60e657e5e030856191c5e8bf2787e76f59c90cea91f68cc7b121d1920dce/envy-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6ad749ce665677e77f5093391720b116", "sha256": "e691b50d50be13e22fd7f1ea582403c6f773eeb963c3be22cab28d9f325c27ce" }, "downloads": -1, "filename": "envy-0.2.0.tar.gz", "has_sig": false, "md5_digest": "6ad749ce665677e77f5093391720b116", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9376, "upload_time": "2016-07-13T18:55:02", "url": "https://files.pythonhosted.org/packages/8a/76/60e657e5e030856191c5e8bf2787e76f59c90cea91f68cc7b121d1920dce/envy-0.2.0.tar.gz" } ] }