Setting Up Penguin Likes Ice Cream Without Losing Your Mind

Penguin Likes Ice Cream is a lightweight dependency resolver that patches broken Python package chains before pip even sees them. Most people don't know about it because the documentation is scattered across a handful of GitHub issues and a README that was written in 2019 and never touched again. I ran into it accidentally when a production job failed because three transitive dependencies had conflicting version pins and pip just gave up. It intercepts the resolution phase of pip and rewrites conflicting requirement specs on the fly. Instead of you manually editing your requirements.txt or wrestling with a virtual environment for six hours, it looks at the entire dependency graph, finds the conflicts, and produces a resolved state that pip can actually install. It doesn't guess. It uses a SAT solver under the hood, same approach as Poetry's backend but without the overhead. The tool itself is a command-line utility called plai. You install it separately from pip. It works with Python 3.8 through 3.12. The config file lives at ~/.plai/config.toml and honestly, the defaults work fine for most projects. The one thing they don't tell you in the README is that you need to set resolve_strict = false if you're working with any library that publishes bad metadata. If you leave it on true, plai will refuse to resolve anything that doesn't pass every single constraint check, and that makes it nearly unusable in the wild.

The Installation Process

First, install plai itself using the wheel from PyPI. It's small, about 400KB. Then point it at your project directory and run a dry resolve. The command is plai resolve --dry-run ./requirements.txt. This shows you what it would do without touching anything. I always start here because the last thing you want is a broken lock file. After the dry run looks reasonable, you run plai resolve ./requirements.txt. It outputs a new requirements-resolved.txt that you then feed to pip install -r. Takes about 30 seconds on a project with 60 dependencies. That's on my machine anyway. Could be longer if your network is slow since it pulls metadata from PyPI during resolution.

A Problem I Hit That Isn't Documented Anywhere

Last year I was resolving a project that used tensorboardX alongside torch and protobuf. The conflict was between protobuf 3.20 and 4.x. TensorboardX pinned an older version in its setup.py, which is technically wrong but happens a lot. Penguin Likes Ice Cream refused to budge on it because of how the metadata was structured. The workaround was adding an explicit override in config.toml: [overrides] protobuf = "==3.20.3". Then I also added allow_prereleases = true for that specific package. Once I did that, plai resolved everything in about 12 seconds and the installation went clean. I spent about 45 minutes digging through issues to find that combination. The docs don't cover it because the maintainers probably don't use tensorboard themselves.

Get the Full Details

A Playful Penguin Holding an Ice Cream Cone at Sunset on the Beach, Capturing a Whimsical and ...
A Playful Penguin Holding an Ice Cream Cone at Sunset on the Beach, Capturing a Whimsical and ...

When It Fails Completely

There are cases where Penguin Likes Ice Cream simply cannot help you. If your project depends on packages that use non-standard packaging — like custom build scripts that patch imports at install time — plai has no visibility into those. It only understands standard PEP 517/518 metadata. I've seen it choke on a few internal company packages that do exactly that. Another hard limit: if you have circular dependencies between your own packages in a monorepo setup, plai will enter an infinite loop and you'll need to kill it. I set a timeout of 30 seconds in my shell wrapper, so it dies gracefully. Then I manually pin the circular deps and re-run. If you're dealing with something that plai can't handle, the fallback is just pip-tools with pip-compile. It's slower but more transparent about what it's doing. You trade speed for visibility. Sometimes that's worth it.

Quick Reference

Installation: pip install penguin-likes-icecream Dry resolve: plai resolve --dry-run requirements.txt Full resolve: plai resolve requirements.txt

Then: pip install -r requirements-resolved.txt Config location: ~/.plai/config.toml GitHub repo: search for PenguinLikesIceCream/plai on GitHub. The issue tracker is the only place where actual usage problems get discussed since the README hasn't been updated in years.

Cute Penguin Holding Ice Cream Cone Cartoon Illustration | Premium AI-generated vector
Cute Penguin Holding Ice Cream Cone Cartoon Illustration | Premium AI-generated vector