Skip to main content

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

poopip-0.2.2.tar.gz (7.9 kB view hashes)

Uploaded Source

Built Distribution

poopip-0.2.2-py2.py3-none-any.whl (8.0 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page