Skip to content

Have one supported dev setup path?Β #1246

@mfisher87

Description

@mfisher87

I think this is resurrecting an old conversation, but we should totally do that every so often :)

cc @chuckwondo

The idea of removing our environment.yml file as a dev environment setup pattern came up again here #1244 (comment)

I fully support this.

Why not (IMO)?

The cognitive load of using a conda-on-top-of-pip (or is it better to say it's "underneath" pip?) setup is very high (less so with pixi, but let's not go there). You need to know about virtual environments, how to activate them, how to avoid accidentally installing things in the base environment, you need to remember to deactivate to avoid cross-project pollution, you probably need to know how to blow away and recreate the environment, you need to know that using pip in an activated conda environment will install dependencies in that environment (IFF you installed pip in the environment, and you should probably know to which pip to be sure) , and most annoying to me, you need to remember and type out the names of environments.

We absolutely cannot guarantee success or happiness with conda.

And I think, in most cases, if a contributor is experienced enough with conda to insist on it for development, they know how to proceed.

Counterarguments

I believe the argument I've heard before is that this is helping to meet developers where they are. I think this is a noble goal and important.

But I think it's more nuanced, we need to ask "at what cost?" If we meet a user where they are and they're unhappy, did we succeed? Can we lead users to happiness while respecting where they're at now? (e.g. making the transition enjoyable and satisfying and demonstrating how it pays off. You know what I mean! Openscapes things!)

the uv rave you didn't ask for

And I think we should further decide on uv as the "one true path" for setting up a dev environment for many reasons. I think uv is easier for new developers because it reduces the number of concepts the developer must understand to work. You don't need to know how to install Python, it just does it; you don't need to know how to set up a venv, or even that you need a venv, or how to activate it, or concepts like source/. (new developer: "wtf is this magic incantation I'm doing??"), it just does it. And you don't need to worry about dev dependencies, it just does it. All with uv sync. One concept! And then you need to know to use uv run to run commands specific to this project. Two concepts total.

Most importantly, we can more-or-less guarantee success solely by writing solid config (e.g. using the dev dependency group), and through success, happiness. The pitfalls of environment management are gone! πŸͺ„ ✨ πŸ’¨

Oh yeah, and it's fast! 😁 That's just an afterthought, far less important IMO than the above ☝️

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    πŸ“‹ Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions