Add support for Python 3.12+
🚀 Feature Request
Can we please add support for Python 3.12?
Motivation
Currently, Python 3.13.7 is out. Newer releases of other systems have started moving towards at least Python 3.12. In my case, Triton inference server's newer versions are being released with Python 3.12, but I am hitting issues when I run fairseq with them.
Pitch
The requirements section mentions that Python>=3.8 are supported. I recently tried running it with Python3.12 and ran into issues due to dataclass - ValueError: mutable default <class 'fairseq.dataclass.configs.CommonConfig'> for field common is not allowed: use default_factory.
I believe, the code uses dataclasses with mutable defaults, which Python 3.12 now rejects.
Additional context
Full stack trace that I received:
root@adoshi:/ python3
Python 3.12.3 (main, Aug 14 2025, 17:47:21) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import fairseq
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/tmp/fairseq/fairseq/__init__.py", line 20, in <module>
from fairseq.distributed import utils as distributed_utils
File "/tmp/fairseq/fairseq/distributed/__init__.py", line 7, in <module>
from .fully_sharded_data_parallel import (
File "/tmp/fairseq/fairseq/distributed/fully_sharded_data_parallel.py", line 10, in <module>
from fairseq.dataclass.configs import DistributedTrainingConfig
File "/tmp/fairseq/fairseq/dataclass/__init__.py", line 6, in <module>
from .configs import FairseqDataclass
File "/tmp/fairseq/fairseq/dataclass/configs.py", line 1127, in <module>
@dataclass
^^^^^^^^^
File "/usr/lib/python3.12/dataclasses.py", line 1268, in dataclass
return wrap(cls)
^^^^^^^^^
File "/usr/lib/python3.12/dataclasses.py", line 1258, in wrap
return _process_class(cls, init, repr, eq, order, unsafe_hash,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/dataclasses.py", line 994, in _process_class
cls_fields.append(_get_field(cls, name, type, kw_only))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/dataclasses.py", line 852, in _get_field
raise ValueError(f'mutable default {type(f.default)} for field '
ValueError: mutable default <class 'fairseq.dataclass.configs.CommonConfig'> for field common is not allowed: use default_factory
>>>
root@adoshi:/
PS - I am first-timer on this repo. Please let me know if you'd like me to change/improve something in this request. Thanks!
Python 3.14 is out :(
+1 this is important
+1 this issue has made me working for a whole day ...