Skip to main content

poopip: for when pip is too slow 💩

poopip is a tiny python package installer/uninstaller designed for working on local (i.e. already in your filesystem) pure python packages

poopip has very few features, but this makes it fast! 🔥

get poopip

assuming you have your favorite virtual environemnt already set up, you can run

pip install poopip

or else you can clone this repo and issue

python poopip/poopip.py install poopip/

usage

for some/path/to/a/package the following should work:

# install to our current environment
poop install some/path/to/a/thing
# install globally for current user
poop --user install some/path/to/a/thing
# install in "editable" mode
poop install -e some/path/to/a/thing
# uninstall package from current environment
poop uninstall thing
# uninstall user's global package
poop --user uninstall thing

generally poopip will take the name of the directory as the name of the package and assume the code is either at thing/thing.py, or a directory thing/thing/ - it's on our todo list to read the pyproject.toml for this.

goals

  • fast: aims to be the fastest step in your dev/ci process
  • small: single file under 1000 lines of code
  • portable: pure python, zero dependencies
  • readable: reading the source code will tell you something about how installs work

On the portability front, currently poopip only officially supports linux - contributions are welcome.

non-goals

  • requirements: poopip doesn't care about your package's requirements, just use a requirements file and install them yourself
  • pypa specifications: poopip doesn't aim to implement all of the specifications where they conflict with its goals
  • setup.py: we have no intention of supporting setup.py or even dynamic pyproject fields

Note that while poopip understands and can update or uninstall pip-installed packages the converse is not true. The reason is that poopip's metadata operates at the directory level, whereas pip relies upon a list of individual files - creating this list is slow with large packages, so we don't do it. Use poopip to unistall poopip-installed packages.

benchmarks

Here's how long it takes to install poopip itself (a zero-dependency, single python file) with various tools. In the regular old install case, poopip is up to 300x faster than pip!

interpreter command time
pypy3.10 pip install --no-deps . 5.645s
pypy3.10 pip install --no-deps -e . 5.983s
pypy3.10 flit install --deps none 6.143s
pypy3.10 flit install -s --deps none 0.415s
pypy3.10 python poopip.py install . 0.136s
pypy3.10 python poopip.py install -e . 0.116s
python3.11 pip install --no-deps . 1.981s
python3.11 pip install --no-deps -e . 1.920s
python3.11 flit install --deps none 2.008s
python3.11 flit install -s --deps none 0.183s
python3.11 python poopip install . 0.061s
python3.11 python poopip install -e . 0.075s

Flit's not really a package manager, but it is much faster than pip if we use symlinks (flit install -s --deps none), so if you're after a good dev experience and only want to install in editable mode I would highly recomend it as a more sane option.

Metadata

Release files for poopip 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for poopip 0.2.2
File Size Uploaded
poopip-0.2.2.tar.gz 7.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for poopip 0.2.2
File Interpreter ABI Platform
poopip-0.2.2-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 15.8 kB

Release files / poopip-0.2.2.tar.gz

Download URL poopip-0.2.2.tar.gz
Size 7.9 kB
Tags Source
SHA-256 checksum
How to use checksums
0137afe44e1db492d7284c41242fb845505cb54fe82cf33ff1b0f4a592628229
BLAKE2b-256 checksum
How to use checksums
9f983f80a6d064dbba017b7d14c8653b6d854c7b12625e216fe1d50af4de3a67
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

Release files / poopip-0.2.2-py2.py3-none-any.whl

Download URL poopip-0.2.2-py2.py3-none-any.whl
Size 8.0 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
7b65bdd73bad2b16e799fd3505cbace6a391eaad1e487a87b0d0aa7a2caff702
BLAKE2b-256 checksum
How to use checksums
d7246088c5292496c8fb5ff906a4bbf66a3b75de7c0c67a5bf8718334e656fc0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page