Exploring Other Build Systems
In the previous lesson, I did a deeper dive on the available configuration options in your
pyproject.toml file. In this lesson, I’ll briefly demonstrate two alternate build systems, Flit and Poetry.
Flit is an alternate build system you can use instead of
setuptools. It’s simpler than most of the alternatives and doesn’t support things like C extensions. Because of this limitation, it means you have far fewer things to worry about for your project and its configuration. It’s not compatible with
setuptools, so you need different entries in your
I’ll be showing you a new file that’s not the one in the
reader repo. Like most packages—a bit of foreshadowing there on most—Flit is installed through
pip. Let me show you what it looks like to use this tool.
Once you’ve got Flit installed, to get going, you use
flit init. It will ask you some questions. First off, the name of the module, which it detects from the directory if you’re already in the package folder.
01:03 I’ll accept the default. Then it wants who you are, where you can be reached,
01:14 where the project lives,
and asks you for your choice of license. Once you’ve done all that, it generates a
pyproject.toml file. It looks like this.
Note that this is just the base. It doesn’t have the dependencies in here or the scripts, so in the case of
reader, you’d have to add some additional info.
Like the example I mentioned in the previous lesson, Flit uses the
dynamic field. Here it’s saying it’ll generate the version and description for you based on an expected
__version__ value and a docstring inside of
Once you’ve got the
pyproject file created and customized, you simply use
flit build to build the package and, once built,
flit publish to publish it.
Another popular build system is Poetry. It’s a bit more complicated than Flit and includes a very powerful dependency management feature. If you’re dealing with a larger project with a lot of interrelated dependencies, Poetry just might be the tool for you. Like Flit, it isn’t compatible with
setuptools and needs its own stuff in the
pyproject file. And although you can install it using
pip, the docs suggest against it. It has its own custom installer.
My understanding is they’ve done this to try and minimize the chance of package conflicts between the
poetry tool and your own project. Let’s go see the Poetry basics.
If you’re starting from scratch and don’t even have a project structure yet, the
poetry new command will generate the directory and give you some skeleton files. If, like us, you’ve already got a project structure, you use the
poetry init command instead.
03:09 Like Flit, it asks you some questions. It takes a guess at the name. Note the default here. Flit looked in the source directory, and so it saw a reader. Poetry looks at the package directory, which I’ve renamed so that I can demonstrate the three different build systems.
03:24 I’ll stick with the default here. Now a version number. Let me correct that. And a description …
03:36 author. Yep, I’m pretending to be Geir Arne again. Don’t tell him I stole his identity. A license prompt. I’m going to stick with nothing for now. And a question about what version of Python.
You can have it interactively ask about dependencies, but you’ve seen those before, so I’m going to skip this. And likewise, for dev dependencies. The resulting
pyproject file gets printed to the screen.
04:06 If you’re happy with it, you say yes, and it generates it for you.
And here it is. Notice how the
build-system section is
poetry rather than
setuptools. And the metadata is in the
This allows Poetry to use whatever attributes it wants rather than having to stick to the PEP definition. This is, again, sort of a history thing. Poetry’s been around for a bit and has been trying to solve some of the problems that are now solved in
setuptools but weren’t before.
04:41 Like with my Flit example, there’s a bunch of missing stuff here. I skipped the dependency steps and didn’t do anything about the script callouts. So this isn’t a feature-full example, but you get the idea.
Like I said, the TOML’s a bit different because Poetry predates PEP 621, but the commands are very similar to Flit.
build to build and
poetry publish to publish.
An entire course could be devoted to the ins and outs of Poetry. This was more of a taster, so you could see there were alternatives to
There are plenty of choices when it comes to packaging in the Python world, whether it’s
setuptools, Flit, Poetry, or something else, hopefully you can find tools that meet your needs.
05:27 Last up is the course summary, and as usual, that includes some references for further investigation.
Become a Member to join the conversation.