Resolving Pip Dependency Conflicts with pipresolver
Stuck in dependency hell with Python? Discover pipresolver, a tool I created to effortlessly navigate package version conflicts. I faced issues with metagpt and gradio needing different typer versions. Instead of manually sifting through versions, pipresolver automates the search for compatible p...


As Python developers, we’ve all been there: you’re excited to start a new project, only to find yourself stuck in dependency hell. Incompatible package versions can turn a simple installation into a frustrating ordeal. Recently, I encountered this very issue with metagpt and gradio, both depending on different versions of typer. In this post, I’ll share my experience and introduce a tool I developed to solve this common problem.
The Dependency Dilemma
Let’s set the scene: I wanted to use both metagpt and gradio in my project. Sounds simple enough, right? Wrong. Here’s what I discovered:
- metagpt requires typer version 0.9
- The latest version of gradio requires typer version 0.12
When I tried to install gradio, it failed because it overwrote the older version of typer, breaking metagpt in the process. So, what’s a developer to do?
The Traditional (Tedious) Solution
One approach would be to manually search through gradio’s version history, looking for a version that’s compatible with typer 0.9 or lower. This method, while potentially effective, has some significant drawbacks:
- Time-consuming: Sifting through numerous versions can take hours.
- Error-prone: It’s easy to miss a compatible version or make a mistake.
- Frustrating: Let’s face it, this isn’t the most exciting use of a developer’s time.
A Better Way
To address this issue, I developed a tool called pipresolver. This utility automates the process of finding compatible package versions, saving you time and reducing the likelihood of errors.
You can try it out here GitHub repo.
How pipresolver Works
pipresolver checks all previous versions of a package to find the first one that matches your required compatibility. Here’s the basic syntax:
pipresolver <package to install> <dependent package> <version dependent package should have or less>
Let’s see it in action with our gradio and typer example:
pipresolver gradio typer '<=0.9'
The Search Process
When you run pipresolver, it starts by checking the most recent versions of the package you want to install (in this case, gradio). It then works its way backward through the version history, checking each version’s dependencies against your requirements.

The tool continues this process, examining numerous versions:

Finding the Solution
After checking multiple versions, pipresolver finally finds a compatible match:

In this case, pipresolver discovered that gradio version 4.25.0 is compatible with typer <=0.9, solving our dependency conflict.
How to Get Started with pipresolver
Ready to simplify your dependency resolution process? Here’s how to get started:
- Interpreting Results: pipresolver will output the compatible version it finds. You can then use this information to install the correct version of your package. If a compatible version is found, it will be shown. The tool will stop if the dependency was not present in previous versions.
Run pipresolver: Use the following syntax to run the tool:
python pipresolver.py <package to install> <dependent package> <version constraint>
Navigate to the Directory: Change to the pipresolver directory:
cd pipresolver
Clone the Repository: First, clone the pipresolver repository from GitHub:
git clone https://github.com/deepmtch/pipresolver.git
Please note that while pipresolver aims to be helpful, there’s no guarantee of perfect results. The tool might still have bugs, and we’d be happy to have your contributions to improve it. As they say, “Many eyes make all bugs shallow,” so feel free to report issues or submit pull requests!
Happy coding, and may your dependencies always resolve smoothly!