If you’re working with the Frappe Framework and trying to install an app using:
bench get-app <repo_url>
…and you hit this error:
Failed to resolve dependencies for `frappe`
Package `gunicorn` was included as a URL dependency
You’re not alone. This is a common issue now, especially with newer versions of Bench.
What Changed in Bench?
Earlier, Bench used:
pip install
Now, it uses:
uv pip install
This change improves speed and dependency resolution in general — but it introduces compatibility issues with older setups like Frappe v14.
Why This Error Happens
Frappe v14 uses Git-based dependencies such as:
gunicorn @ git+https://github.com/frappe/gunicorn@<commit>
pipsupports this formatuv(in strict mode) does not accept indirect Git dependencies
So when you run:
bench get-app <repo_url>
Bench internally runs:
uv pip install -e <app>
…and the installation fails during dependency resolution.
pip vs uv (Quick Comparison)
| Tool | Behavior |
|---|---|
| pip | Flexible, allows Git-based dependencies |
| uv | Strict, rejects indirect Git dependencies |
This is the root cause of the issue.
The Clean Fix (Recommended)
Instead of modifying files or using workarounds, the correct fix is to disable uv and use pip.
Temporary Fix (Single Command)
BENCH_DISABLE_UV=1 bench get-app <repo_url>
Session-Based Fix
export BENCH_DISABLE_UV=1
bench get-app <repo_url>
Permanent Fix (Best for Developers)
Open your shell config:
nano ~/.bashrc
Add this line:
export BENCH_DISABLE_UV=1
Reload:
source ~/.bashrc
Windows Setup
Command Prompt:
set BENCH_DISABLE_UV=1
PowerShell:
$env:BENCH_DISABLE_UV = "1"
What This Fix Does
Before:
bench get-app → uv pip install ❌
After:
bench get-app → pip install ✅
It simply forces Bench to fall back to pip, which supports Frappe’s dependency structure.
Why This Works
- Frappe v14 depends on Git-based packages
pipsupports themuvrejects them in strict mode
Switching back to pip resolves the issue without breaking anything.
Avoid These Workarounds
You might come across suggestions like:
- Editing
apps.json - Editing
apps.txt - Installing apps manually using
pip
These approaches are not recommended because they:
- break Bench consistency
- cause future upgrade issues
- create hard-to-debug states
Important Insight for Debugging
There are two layers involved in Frappe:
Python Layer
- pip / uv
- dependency installation
Bench Layer
- apps folder
- apps.json
- apps.txt
bench get-app connects both.
If dependency installation fails:
- Python layer fails
- Bench registration also fails
This is why the issue looks bigger than it actually is.
Pro Tip
If you encounter errors like:
frappe dependency resolution faileduv pip install error frappegunicorn URL dependency error
Try this first:
export BENCH_DISABLE_UV=1
Final Thoughts
This issue is not just a bug — it’s a result of evolving Python tooling.
Modern tools like uv are stricter, while frameworks like Frappe v14 still rely on flexible dependency handling from pip.
TL;DR
export BENCH_DISABLE_UV=1
bench get-app <repo_url>
This simple fix saves hours of debugging and keeps your Frappe setup clean.

