poopip: for when pip is too slow 💩
Project description
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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for poopip-0.2.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b65bdd73bad2b16e799fd3505cbace6a391eaad1e487a87b0d0aa7a2caff702 |
|
MD5 | 2ecbf25664d6d7dac11f727d04ff1a6d |
|
BLAKE2b-256 | d7246088c5292496c8fb5ff906a4bbf66a3b75de7c0c67a5bf8718334e656fc0 |