beeware / briefcase

Tools to support converting a Python project into a standalone native application.
https://briefcase.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
2.48k stars 353 forks source link

Use an isolated environment for `briefcase dev` #1735

Open freakboy3742 opened 2 months ago

freakboy3742 commented 2 months ago

What is the problem or limitation you are having?

At present, briefcase dev uses the currently active virtual environment to run a project in developer mode.

However:

Describe the solution you'd like

briefcase dev should create and use a standalone virtual environment for development mode. This would ensure that each app has unique and isolated dependencies.

Describe alternatives you've considered

Do nothing.

Additional context

The most notable impact of this approach is that dependencies installed in the briefcase environment will no longer be visible to development mode. This complicates the process of adding dependencies to a project; however, it would be consistent with the behavior of briefcase run - so arguably this is a good thing, as it would avoid the "package X is in my environment, why doesn't briefcase run work" questions.

If this change is made; we may want to consider to additional related changes:

  1. a --no-isolation option that reverts to the current "use the briefcase environment" behavior
  2. a new briefcase add command to manage adding new dependencies

An alternative to (2) would be #1367 (or similar) - i.e., provide better integration with other tools that manage dependencies.

It will also impact on #881/#1714-style build tracking; but likely in a positive way, as isolation will remove some edge cases in keeping the environment current.

freakboy3742 commented 2 months ago

I've raised this issue for discussion - I'm not 100% sold on whether it's a good idea. Before anyone starts on an implementation, please confirm consensus has been reached on whether this is a good idea.

michelcrypt4d4mus commented 1 month ago

+1 to this... just ran into a situation where because i installed briefcase in the global python environment running briefcase dev -r was installing all dependencies into the global environment. while this is my fault for installing briefcase outside of a venv it was a confusing and unexpected user experience (and this is outside of the advantage of avoiding inconsistencies between local dev and the packaged environment as mentioned by @freakboy3742)