Add support for Python 3.12+
enhancementhelp wantedneeds triage
## 🚀 Feature Request
Can we please add support for Python 3.12?
### Motivation
Currently, [Python 3.13.7](https://www.python.org/downloads/release/python-3137/) 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](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver/tags) are being released with Python 3.12, but I am hitting issues when I run fairseq with them.
### Pitch
The [requirements section]( https://github.com/facebookresearch/fairseq?tab=readme-ov-file#requirements-and-installation) 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:
```bash
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!
2 条评论