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)
| File | Size | Uploaded | |
|---|---|---|---|
| poopip-0.2.2.tar.gz | 7.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|