This is a known problem and the s3fs people fixed it by installing s3fs with the boto3 add-in like this:
s3fs[boto3]
Then remove the separate boto3 from the pyproject.toml. We recently did this in buildstockbatch and it made a huge difference in being able to keep up to date with versions.
You'll notice when you install buildstock_query, pip churns for a while going through versions of boto3 to find a compatible version with s3fs.
https://github.com/NREL/buildstock-query/blob/main/pyproject.toml#L13-L14
This is a known problem and the s3fs people fixed it by installing s3fs with the boto3 add-in like this:
Then remove the separate boto3 from the pyproject.toml. We recently did this in buildstockbatch and it made a huge difference in being able to keep up to date with versions.