Skip to content
This repository was archived by the owner on Sep 26, 2025. It is now read-only.
This repository was archived by the owner on Sep 26, 2025. It is now read-only.

Future of pyctdev? Considering alternatives? How about our workflow? #104

@maximlt

Description

@maximlt

pyctdev is an interesting approach to project management, providing a unified interface to usual tasks (test, build packages, build docs, ...). Another interesting feature it has is providing a unified interface to managing a project dependencies with conda or pip. I follow discuss.python.org and see that standardizing common project tasks is something that is in the air (a project like VSCode would greatly benefit from this being standardized for instance), however, that's pretty difficult to standardize globally and will certainly not happen any time soon, if ever.

pyctdev isn't perfect yet and it feels sometimes it's getting in our way. I'll make some comments on why I think that:

  • it is yet another tool to maintain and that can break sometimes
  • it is yet another tool, that happens not to be popular at all and as such is something potential contributors have to learn and it's not particularly well documented
  • its tasks are extensible, which is nice, but that means it doesn't necessarily enforce all of them. For instance, across the HoloViz projects running linters isn't done using the same command (doit test_lint, doit test_flakes, ...).
  • the commands users should mostly execute are the ones that run the tests (e.g. doit test_unit). However as a developer working on a bug fix or a new feature you would usually not run the whole test suite but instead run some specific files or even specific tests. So you need to find out which command is executed by pyctdev (that would be in tox.ini) and adapt it to your use case.
  • the tests a project may want to run are defined in a tox.ini file. Tox is used internally by pyctdev but as a user you would usually not interact with it directly (as least I haven't done it), which I find pretty confusing.
  • maybe the biggest difficulty we have around pyctdev and our worklow, is that we use conda to manage the project dependencies (at least that's the case on the CI). The developer workflow with conda isn't quite yet optimal: channel management is tricky, conflicts happen regularly in a changing ecosystem, environment solving can be very slow, and managing an environment (e.g. installing a new dependency) is pretty tricky as conda has to deal with a package installed in editable mode (maybe overriding it with a dev version it'll install from conda) and as a user you have to remember the channels that were used to create the environment
  • an additional thing that makes it difficult to adopt even in the HoloViz group is that some of us (including me) don't have a single environment per project but have shared environments

Given all that, I think it's worth considering changing our workflow/pyctdev to improve the HoloViz developer experience, including for us and our contributors.

Some general questions we could ask ourselves would be:

  • Even it's likely we'll always need our own custom things, should we still have pyctdev being our front-facing develop CLI?
  • Should we still recommend/use conda as the package manager?

They are more and more projects in the Python environment that are dedicated to project management and running tasks. Here's a list of projects that might be interest to look at, as potential replacement or to draw some inspiration from:

It may also be wise having a look at how projects which manage multiple sub-projects handle that:

Finally I'd like to ask a few questions to the HoloViz developers, to see what's their experience with pyctdev and how they use it.

  1. Do you use pyctdev? If not, what do you use instead?

  2. Do you use conda to create environments? If not, what do you use?

  3. Do you use conda or pip or both to install your Python project dependencies?

  4. If you do use pyctdev, which commands do you use? How often do you use them or in which case?

Please @jbednar @philippjfr @jlstevens @hoxbro @ianthomas23 @droumis reply to these questions below.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions