Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tools comparison tables #1196

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

sinoroc
Copy link
Contributor

@sinoroc sinoroc commented Jan 24, 2023

Is it something that would be interesting for the guide in principle?

Preview:

Plan is to add more tools, most notably conda and maybe also things like Spack, scikit-build, and so on. But first I would like to have an agreement that something like this is useful, and that this form is suitable.

@sinoroc sinoroc force-pushed the tools-comparison-tables branch 2 times, most recently from 0773046 to acb7387 Compare February 1, 2023 16:56
@sinoroc sinoroc force-pushed the tools-comparison-tables branch 6 times, most recently from fc81238 to f5d8598 Compare February 27, 2023 11:42
:header-rows: 1
:stub-columns: 1

,``[build-system]`` (PEP-517),``[project]`` (PEP-621),editable (PEP-660),C extensions
Copy link
Contributor

@henryiii henryiii Mar 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The key difference between tools like enscons, scikit-build-core, and meson-python is the language they use for configuring C extensions. I'd change the C extensions column into an "Extensions configuration" column, and put things like "SCONS" for enscons. I'd add scikit-build-core with "CMake", maturin with "Cargo (Rust)", and meson-python with Meson. setuptools would be "setup.py". The others with "no" would be either "None", except for poetry-core ("build.py"), and hatchling ("Via plugins").

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@henryiii Thanks for the suggestions. I think I managed to integrate them all.

@sinoroc sinoroc force-pushed the tools-comparison-tables branch 2 times, most recently from fc6d036 to b6913f5 Compare March 21, 2023 11:14
@sinoroc sinoroc force-pushed the tools-comparison-tables branch 3 times, most recently from 81e481e to 60bb50e Compare November 3, 2023 17:19
@jeanas
Copy link
Contributor

jeanas commented Nov 10, 2023

This PR looks really useful, but unfortunately has been open since January. Would any maintainer have the time to take a look?

@willingc
Copy link
Contributor

@sinoroc If you fix the conflict, I would be happy to review. @jeanas If you want to give this an initial review, that would be great too.


,Install Python,Install packages,Build distributions,Upload distributions,Manage virtual environments,Lock files
build,no,no,yes,no,no,no
Flit,no,yes,yes,yes,yes,yes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not believe Flit has lock file support.

Also, I find the "Install Packages" column a bit misleading because pip is a general package installer, while Flit, Hatch & co. can only install the project being developed, if it uses their build backend.

pipx,no,yes,no,no,no,no
Poetry,no,yes,yes,yes,yes,yes
pyenv,yes,no,no,no,no,no
Pyflow,yes,yes,yes,yes,yes,yes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not mention Pyflow here. It is unmaintained.

Poetry,no,yes,yes,yes,yes,yes
pyenv,yes,no,no,no,no,no
Pyflow,yes,yes,yes,yes,yes,yes
setuptools,no,yes,yes,no,no,no
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe that setuptools' support for installing packages is essentially what powers python setup.py install and is thus deprecated.

venv,no,no,no,no,yes,no
virtualenv,no,no,no,no,yes,no
virtualenvwrapper,no,no,no,no,yes,no
wheel,no,no,yes,no,no,no
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What are you referring to with the “yes” here? You can of course assemble a wheel “by hand” using wheel pack, but I think most people would expect the ability to “build distributions” to mean something different (basically, being a pyproject build frontend).

virtualenvwrapper,no,no,no,no,yes,no
wheel,no,no,yes,no,no,no

Build back-ends are not listed here, but they are in a dedicated section below.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You did list Flit, PDM, ...

:header-rows: 1
:stub-columns: 1

,``[build-system]`` (PEP-517),Build,Upload,Env,Interchangeable build back-end,Plugins,Lock file
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you mean by “[build-system] (PEP-517)”? That it is a PEP 517 compliant build backend?

As said above, I'd remove Pyflow from this table; then this column won't be useful anymore since all of the other backends listed support PEP 517.

I'd also expand “Env” (“Manage environments”?) and add a note to explain what “Interchangeable build back-end” means.

pipx,yes,no

``pipx`` is intended to be used to install standalone applications
rather than to install packages in a virtual environment.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since you mention the special purpose of pipx, I'd also mention the special purpose of pip-tools, namely lock file management.

,``[build-system]`` (PEP-517),sdist,wheel
build,yes,yes,yes
pip,yes,no,yes
wheel,no,no,yes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question as above about wheel: I wouldn't consider it a “build frontend”.

@sinoroc
Copy link
Contributor Author

sinoroc commented Nov 11, 2023

@willingc, rebased.


For info:

I do not know which form is the most appropriate.

I do not believe our guide should go too much into details in order to avoid risking being seen as choosing one tool over another (not the Pipenv story again). Also the more details we add, the more we have to keep everything up-to-date as those tools' scopes and feature sets evolve over time.

For sure what this needs is links (but those can be added at the end, because I find it quite annoying to do links in reStructuredText).

This also needs conda for sure, probably spack and maybe a bunch of other things (pex, shiv, pyinstaller, pyoxidize, and so on?). But hard to know what is the right balance. Maybe we do not want to have things that are too niche.

@willingc
Copy link
Contributor

Thanks for the rebase @sinoroc. I think that it would be helpful to add a date to give the reader when the last time this was updated and note that tools are evolving so do check their documentation as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants