Virtual environments have become an essential part of the Python developer experience, but recent tools provide workflows where virtual environments are no longer the center of user interactions.
This talk explores the evolution of virtual environments, from their originating motivations and the role they serve today to a vision for the future, with a particular focus on how virtual environments are becoming automated, hidden, and disposable.
Virtual environments were introduced in 2004. We’ll briefly discuss the history of the tools built to manage virtual environments. We’ll talk about the differences between imperative and declarative environment management. Then, we’ll dive into the user experiences powered by automating management of environments, using uv as a primary example.
Finally, we’ll discuss limitations of the existing tooling and how they may be overcome in the future, such as, improving the IDE experience for scripts with inline metadata, locking build requirements, and using declarative interfaces for global environments.
Some prior knowledge of virtual environments and Python packaging will be necessary to reason about the broader questions posed, but the talk will attempt to give the necessary background — deep Python knowledge will not be needed. The talk will be focused on user experience and abstractions rather than implementation details.