Hey all,
As you may know in the HoloViz group we have a project called pyctdev whose goal was to make running packaging/project management tasks easier. As a user you'd run doit env_create
to create an environment, doit develop_install
to install the dependencies, doit test_unit
to run the test suite, doit package_build
to build a package, doit package_upload
to publish the built package, etc. Each one of these commands having various options, and all being driven by a flag/env var ecosystem that would either be conda or pip, making pyctdev
a unified interface for conda and pip users.
While pyctdev was a noble idea that would make managing multiple projects easier, in practice the devs don't find it particularly appealing (holoviz-dev/pyctdev#104). So I've started to have a look around to see whether we could improve pyctdev or find a replacement or simply define a better workflow.
What is not so surprising in hindsight, but is still striking, is the variety of tools and workflows that are offered to Python users/developers. These tools can take care of Python version management, virtual environment management, dependency management, command execution, packaging and publishing (and more). These tools are more or less specialized. I've made a quick list, spending more time I would certainly find many more. I've added some info about their potential handling of conda when I found it.
What retained my attention looking at these tools is that there's a few of them that look like conda-project, at least as far as I understand them after just having a brief look. That would include poetry (11M downloads/month), hatch (90K downloads/month), pdm (75K downloads/month) and pyflow (200 downloads/month, very few!); they usually can manage dependencies, execute commands, ..., and build and publish projects.
conda users are generally Python and Google users, sooner or later they will face all this mess :) As such I believe it will be important for conda-project to clearly define its motivation and scope:
- Why and when should I use a tool like conda-project?
- How does conda-project define a "project"? (the tools I mentioned about all refer to project management, there's now the pyproject.toml file, so it's a pretty overloaded term)
- When should I not use conda-project?
Comparing the capabilities of conda-project to other similar tools could be useful too to guide users when they choose their tooling.
Now a question, is conda-project going to allow users to build and publish their project? I.e. can I use conda-project to maintain a Python package? Or a conda package? Or both :) ? If not, I believe that it should be clearly stated, as I think that's not how Python users understand what a Python project is.
Finally, I would just like to say that now that conda supports plugins, I hope for the sake of its users that it won't end up with what seems to be a pretty messy situation.
Note
Here's a small record of how the four tools mention project in their docs:
- poetry says in its README: "Poetry helps you declare, manage and install dependencies of Python projects, ensuring you have the right stack everywhere."
- hatch says on its Github repo: "Modern, extensible Python project management"
- pyflow says in its README: "Pyflow streamlines working with Python projects and files."
- pdm mentions projects many times in its README