{"id":16489598,"url":"https://github.com/alvinwan/lepoop","last_synced_at":"2026-05-13T17:40:06.637Z","repository":{"id":62575681,"uuid":"115889843","full_name":"alvinwan/lepoop","owner":"alvinwan","description":"Undo your pip commands using `poop`💩","archived":false,"fork":false,"pushed_at":"2018-01-03T00:41:16.000Z","size":27,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-11T19:17:23.843Z","etag":null,"topics":["autoremove","pip","python","shell","undo","utility"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alvinwan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-31T23:22:58.000Z","updated_at":"2018-01-01T12:23:19.000Z","dependencies_parsed_at":"2022-11-03T17:46:18.651Z","dependency_job_id":null,"html_url":"https://github.com/alvinwan/lepoop","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alvinwan%2Flepoop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alvinwan%2Flepoop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alvinwan%2Flepoop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alvinwan%2Flepoop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alvinwan","download_url":"https://codeload.github.com/alvinwan/lepoop/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241316063,"owners_count":19942981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autoremove","pip","python","shell","undo","utility"],"created_at":"2024-10-11T13:44:40.537Z","updated_at":"2026-05-13T17:40:06.601Z","avatar_url":"https://github.com/alvinwan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Le Poop 💩\nAn undo for your pip commands. Why use `Le Poop` instead of `uninstall`? Take any `install`. It can come with a slew of dependencies, and `pip uninstall` graciously allows you to remove your new package, and all its friends, one by one. `Le Poop` cleans up *all* the mess with a single command, `poop`. To get started, install using pip.\n\n```\npip install lepoop\n```\n\nThen, run `poop` after any `pip` command you regret.\n\n![lepoop-3](https://user-images.githubusercontent.com/2068077/34505328-70ad999a-efd9-11e7-8300-06c57ecc2927.gif)\n\nMore examples:\n\n```\n→ $ poop md2py tex2py  # auto-remove, no matter installed how long ago\nPackages md2py are not installed. I'm ignoring them.\npip uninstall -y pptree tex2py texsoup [enter/ctrl+c]\nUninstalling pptree-2.0:\n  Successfully uninstalled pptree-2.0\nUninstalling tex2py-0.0.4:\n  Successfully uninstalled tex2py-0.0.4\nUninstalling TexSoup-0.1:\n  Successfully uninstalled TexSoup-0.1\n```\n\n```\n→ $ pip install datascience\nCollecting datascience\n...\nSuccessfully installed coveralls-0.5 datascience-0.10.3 folium-0.1.5 sphinx-1.6.5\n\n→ $ pip install tex2py\nCollecting tex2py\n...\nSuccessfully installed TexSoup-0.1 coveralls-1.1 pptree-2.0 tex2py-0.0.4\n\n→ $ poop --skip 1\npip uninstall -y sphinx folium datascience [enter/ctrl+c]\nUninstalling Sphinx-1.6.5:\n  Successfully uninstalled Sphinx-1.6.5\nUninstalling folium-0.1.5:\n  Successfully uninstalled folium-0.1.5\nUninstalling datascience-0.10.3:\n  Successfully uninstalled datascience-0.10.3\n\n→ $ poop\npip uninstall -y tex2py pptree texsoup [enter/ctrl+c]\nUninstalling TexSoup-0.1:\n  Successfully uninstalled TexSoup-0.1\nUninstalling tex2py-0.0.4:\n  Successfully uninstalled tex2py-0.0.4\nUninstalling pptree-2.0:\n  Successfully uninstalled pptree-2.0\n```\n\n```\n→ $ pip download md2py\nCollecting md2py\n  Using cached md2py-0.0.1.tar.gz\n  Saved ./md2py-0.0.1.tar.gz\nCollecting markdown (from md2py)\n  Using cached Markdown-2.6.10.zip\n  Saved ./Markdown-2.6.10.zip\nCollecting beautifulsoup4 (from md2py)\n  Using cached beautifulsoup4-4.6.0-py3-none-any.whl\n  Saved ./beautifulsoup4-4.6.0-py3-none-any.whl\nSuccessfully downloaded md2py markdown beautifulsoup4\n\n...a day passes...\n\n→ $ ls\nMarkdown-2.6.10.zip\t\t\tdonttouchme.tar.gz\nbeautifulsoup4-4.6.0-py3-none-any.whl\tmd2py-0.0.1.tar.gz\n\n→ $ poop\nAlready pooped. (No undoable pip commands.)\n\n→ $ poop --harder\nrm md2py-0.0.1.tar.gz Markdown-2.6.10.zip beautifulsoup4-4.6.0-py3-none-any.whl [enter/ctrl+c]\n\n→ $ ls\ndonttouchme.tar.gz\n```\n\n`Le Poop` supports undos for the only three `pip` commands it makes sense to undo:\n\n- `pip install`: Uninstall packages that were *just* installed. Leaves older packages intact, unless `poop` is run successively.\n- `pip download`: Removes tarballs and wheels for the just-downloaded package and all its dependencies.\n- `pip uninstall`: Reinstall the package in question.\n\n```\nusage: poop [-h] [-a] [--harder] [--stronger] [--skip SKIP]\n            [package [package ...]]\n\npositional arguments:\n  package      packages to uninstall\n\noptional arguments:\n  -h, --help   show this help message and exit\n  -a, --alias  Alias to `poop`\n  --harder     Look through bash history as far as possible.\n  --stronger   Look through bash history and module source files for modules\n               to uninstall.\n  --skip SKIP  Number of pip commands to skip.\n```\n\n### Inspiration (Rated R) 🤭\n\nInspired by [nvbn](http://github.com/nvbn/)'s [The Fuck](http://github.com/nvbn/thefuck) (no affiliation). I initially wanted to name this repository `The Shit`. The command-line utility would be `shit`, and if the app had no suggestions, it'd respond `no shit`. Ultimately decided to keep it PG. `Poop` is closer to `pip` in edit distance any how.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falvinwan%2Flepoop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falvinwan%2Flepoop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falvinwan%2Flepoop/lists"}