Launch-day availability of Python 3.13 in conda-forge

Congratulations on the 3.13 release! :partying_face:

From the side of conda-forge, we’ve managed to repeat what we did last year and build out >1000 packages for python 3.13 at the time of its official release (reminder: this works out due to the ABI-stability of the release candidates), e.g. you can do

mamba create -n my_new_env python=3.13 pandas scipy matplotlib requests

on our main platforms (linux-{64,aarch64,ppc64le}, osx-{64,arm64}, win-64). You can check out the status of your favourite package here – at this point we’re blocked mainly by waiting for upstream support to become available in various dependencies.

There have been many large changes[1] in conda-forge over the last year, so the fact that it worked out again was not a given. Thanks a lot to all the people that contributed for making this possible!

Note, the above only goes for the regular 3.13 builds that still rely on the GIL. We do have freethreading builds for python itself already, and have started building out the first packages for this, but this will be a much slower process (tracker), because many packages still need upstream development to be made threadsafe, or there are no compatible releases yet.

To use these builds, you can use the following convenience wrapper

mamba create -n look_ma_no_gil python-freethreading  # this space intentionally left blank

however, don’t expect to be able to install anything else but python (through conda-forge) for now. Other packages will follow in time, but of course, you can use this as an environment for experimenting, testing etc., if you install packages into it locally (e.g. through pip)

Likewise, there’s a convenience wrapper to enable the experimental JIT

mamba install python-jit

This can be combined with either the regular or nogil python (in contrast to the nogil builds, the JIT doesn’t change the ABI; the only thing that gets installed is a wrapper that sets the required PYTHON_JIT=1).

If you have questions about any of this, leave a comment here (and I’ll try to respond), or get in touch with us through one of the many available channels. If you’d like to help on some of the package feedstocks – even better! :grin:


  1. e.g. moving the glibc/macOS baseline, numpy 2.0, new CUDA infrastructure, and many more; things don’t seem to be slowing down though, there’s even more & bigger things in the pipeline! ↩︎

24 Likes

That’s really impressive, congratulations!

One limit I have for each python release is that the conda-build package itself is not available for the new python release (in this case 3.13, but it was the same in 3.12). I can use a 3.12 environment to build for 3.13, but the limitations I have in my workplace make this cumbersome. For example, support for 3.12 was added in february. Is there a specific reason why the support is not added sooner?

1 Like

Hm, I think very few use-cases are going to need conda-build, which is purely for building packages. This is a good example where different environments for different use-cases make sense. I have a builder environment for that very purpose, and its python version doesn’t need to match what I do elsewhere.

A note about rattler-build

You may also want to look into rattler-build, which is the next-generation build tool for conda-packages, and written in rust (so the question about python version compatibility doesn’t even come up). It comes with a new and much-improved recipe format (called v1, because we do zero-based indexing :wink:) that will eventually supplant the current one (v0); a handful of feedstocks in conda-forge are being converted already, but it’ll still take a while until this happens at scale.

The main reason is that conda-build depends on lief for a bunch of key features (like detecting what libraries are being linked to), and so you need a version of lief that’s compatible with the required python version. For python 3.12, we needed to upgrade to the latest lief, and given how low this sits in our stack, multiplied by its use in every single build, this takes some time[1]

This time, the current lief versions doesn’t need to be changed to support Python 3.13, but what’s happening this time is that some dependencies of conda{,-build} cannot be built yet, in particular, ruamel.yaml.clib depends on cython <3, which doesn’t support Python 3.13. This means someone needs to make that package compatible with Cython 3, or remove/replace the use of that package in conda itself. All that takes time.


  1. and in the end still introduced major regressions in some cases. ↩︎

Thank you for the additional information. I will try to dedicate an environment for building and see how it goes.