Skip to content

Why Industry Developers Recommend Web Apps Over Python Desktop Apps

The Problem

I spent three weeks building a Python desktop application with a beautiful PyQt interface. It worked perfectly on my machine. Then I tried to distribute it to users.

The nightmare began.

Reddit responses about Python desktop distribution
User A: "It says 'module not found' when I try to run it"
User B: "The installer crashed my antivirus"
User C: "It works but crashes when I open large files"
User D: "Why can I see your source code in the bundle?"

I had 50 users. Each had a different problem. Each needed individual support.

What I Tried First

I used PyInstaller to bundle the app:

PyInstaller bundling command
pyinstaller --onefile --windowed myapp.py

The resulting executable was 150MB. Users downloaded it. Half couldn’t run it.

Then I tried creating proper installers with Inno Setup on Windows and a DMG on macOS. That helped some users, but I was now maintaining three different distribution channels.

Then version 1.1 came out. I had to ask everyone to re-download and re-install.

The Industry Reality Check

I posted about my struggles on Reddit. The responses were brutal:

Reddit responses about Python desktop distribution
"Distributing and updating desktop applications in python is an absolute
hellscape" (bjorneylol, 23 votes)
"I'd personally recommend a web app 100% of the time for python. It completely
avoids any dependency chaos you'd encounter with a true desktop app"
(j01101111sh, 30 votes)
"Real industry experience here: Build a web app. For installable applications,
ship compiled binaries built with rust, c++, .net. Shipping python applications
is a pain. The customer gets the source code" (Substantial-Bed8167, 36 votes)
"If it's external software... an actual desktop application written in python
would make me seriously question the software house" (konwiddak, 1 vote)

The message was clear: Python desktop apps are for internal tools. For production software, use web apps or compiled languages.

The Four Core Problems

1. Dependency Chaos Across Environments

With a web app, I deploy to one server. I control that server. Python version, packages, environment variables - all consistent.

Reddit responses about Python desktop distribution
Web App Deployment:
┌─────────────┐
│ Server │ ← One environment to manage
│ Python │
│ Packages │
│ Config │
└──────┬──────┘
┌─────────────────────────────────────────┐
│ Users access via browser (any device) │
└─────────────────────────────────────────┘
Desktop App Deployment:
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ User A │ │ User B │ │ User C │ │ User D │
│ Python? │ │ Python? │ │ Python? │ │ Python? │
│ Ver??? │ │ Ver??? │ │ Ver??? │ │ Ver??? │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
↑ ↑ ↑ ↑
└────────────┴────────────┴────────────┘
Every machine is different

With desktop apps, each user’s machine is a unique snowflake of Python versions, installed packages, system libraries, and permissions.

2. Source Code Exposure

I bundled my app with PyInstaller and thought my code was safe. Then a user sent me this:

PyInstaller bundling command
# They extracted my bundled code in 30 seconds
$ pyi-archive_extractor myapp.exe
$ ls extracted/
myapp.pyc # My compiled Python bytecode
utils.pyc
database.pyc
api_keys.pyc # Oh no...

PyInstaller bundles Python bytecode. Decompilers exist. Anyone with moderate technical skills can recover most of the source code.

With a web app, my code runs on my server. Users see HTTP responses. They never see the code.

3. Update Management is Hell

Reddit responses about Python desktop distribution
Desktop App Update Cycle:
─────────────────────────
Developer pushes code
Test on 3 operating systems
Build 3 different installers
Upload to distribution
Users must:
- Know update exists
- Download new version
- Close running app
- Install update
- Restart app
Half your users are on old versions
Web App Update Cycle:
─────────────────────
Developer pushes code
Users refresh browser
Done (everyone on latest version)

The desktop update cycle takes days or weeks. Users procrastinate. Versions fragment. I had to maintain backward compatibility with my own API because users refused to update.

4. Professional Credibility

This one stung. When I released a Python desktop app to a client, their technical lead asked:

“Why didn’t you use .NET? Or Electron? Is this a prototype?”

In enterprise software, Python desktop apps signal “internal tool” or “prototype.” Compiled binaries (Rust, C++, Go, .NET) signal “production software.”

Whether fair or not, this perception matters when selling software or presenting to clients.

When Desktop Actually Makes Sense

After all this, Python desktop apps still have valid use cases:

ScenarioWhy Desktop Works
Hardware interfacingUSB devices, serial ports, sensors need local access
Internal toolsYou control all machines, know all configurations
Small user baseUnder 50 users with known setups
Offline-firstField work, remote locations, no internet

For these cases, tools like PyInstaller, Briefcase, or Nuitka can work. But I now budget extra time for distribution headaches.

What I Do Now

For most projects, I build web apps with Python backends:

Reddit responses about Python desktop distribution
┌──────────────────────────────────────────────────┐
│ Browser │
│ ┌─────────────────────────────────────────────┐ │
│ │ JavaScript/Vue/React Frontend (Optional) │ │
│ └─────────────────────────────────────────────┘ │
└──────────────────────┬───────────────────────────┘
│ HTTP
┌──────────────────────────────────────────────────┐
│ Python Backend │
│ ┌─────────────┐ ┌─────────────┐ ┌──────────┐ │
│ │ FastAPI/ │ │ Business │ │ Database │ │
│ │ Flask API │ │ Logic │ │ │ │
│ └─────────────┘ └─────────────┘ └──────────┘ │
└──────────────────────────────────────────────────┘
One deployment, all users benefit

Benefits I get:

  • One server to manage
  • Source code stays private
  • Updates happen instantly
  • Works on any device with a browser
  • I can use Python where it excels (backend logic)

Summary

In this post, I shared my experience struggling with Python desktop distribution and why industry developers recommend web apps instead. The four main problems are dependency chaos, source code exposure, update management, and professional credibility concerns.

If you need local execution, consider Rust, Go, or .NET for desktop apps. If you love Python, use it for web backends. The distribution model alone will save you weeks of headaches.

Final Words + More Resources

My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me

Here are also the most important links from this article along with some further resources that will help you in this scope:

Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!

Comments