rethinkdb / rethinkdb-python

Python driver for RethinkDB
https://rethinkdb.com/api/python/
Apache License 2.0
64 stars 35 forks source link

Python 3.12 breakage: The distutils module is removed #299

Closed srh closed 1 year ago

srh commented 1 year ago

We have the line import distutils.version in utils_common.py, but distutils is removed in 3.12:

https://docs.python.org/3.11/library/distutils.html

To Reproduce

srh@pc11:~/sw/rethinkdb-python$ cat test.py 
import asyncio
from rethinkdb import r

async def main():
    connection = await r.connect(db='test')

    await r.table_create('marvel').run(connection)

    marvel_heroes = r.table('marvel')
    await marvel_heroes.insert({
        'id': 1,
        'name': 'Iron Man',
        'first_appearance': 'Tales of Suspense #39'
    }).run(connection)

    # "async for" is supported in Python ≥ 3.6. In earlier versions, you should
    # call "await cursor.next()" in a loop.
    cursor = await marvel_heroes.run(connection)
    async for hero in cursor:
        print(hero['name'])

r.set_loop_type('asyncio')

# "asyncio.run" was added in Python 3.7.  In earlier versions, you
# might try asyncio.get_event_loop().run_until_complete(main()).
asyncio.run(main())

srh@pc11:~/sw/rethinkdb-python$ python3.12 test.py 
Traceback (most recent call last):
  File "/home/srh/sw/rethinkdb-python/test.py", line 2, in <module>
    from rethinkdb import r
  File "/home/srh/sw/rethinkdb-python/rethinkdb/__init__.py", line 93, in <module>
    r = RethinkDB()
        ^^^^^^^^^^^
  File "/home/srh/sw/rethinkdb-python/rethinkdb/__init__.py", line 32, in __init__
    from rethinkdb import (
  File "/home/srh/sw/rethinkdb-python/rethinkdb/_dump.py", line 35, in <module>
    from rethinkdb import _export, utils_common
  File "/home/srh/sw/rethinkdb-python/rethinkdb/_export.py", line 40, in <module>
    from rethinkdb import errors, query, utils_common
  File "/home/srh/sw/rethinkdb-python/rethinkdb/utils_common.py", line 22, in <module>
    import distutils.version
ModuleNotFoundError: No module named 'distutils'