flask_sqlalchemy: ошибка с `__setattr__` на` DefaultMeta` - PullRequest
10 голосов
/ 14 июля 2020

После пересборки образа Docker я начал получать следующую ошибку:

$ docker run --rm -it python:3.8-slim /bin/bash
...
$ pip install flask_sqlalchemy
...
$ python -c "from flask_sqlalchemy import SQLAlchemy; SQLAlchemy()"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 715, in __init__
    self.Model = self.make_declarative_base(model_class, metadata)
  File "/usr/local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 797, in make_declarative_base
    model.query_class = self.Query
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/ext/declarative/api.py", line 79, in __setattr__
    _add_attribute(cls, key, value)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/ext/declarative/base.py", line 802, in _add_attribute
    type.__setattr__(cls, key, value)
TypeError: can't apply this __setattr__ to DefaultMeta object

Версии указанных c пакетов:

python -c "import sqlalchemy, flask_sqlalchemy; print(sqlalchemy.__version__, flask_sqlalchemy.__version__)"
1.3.18 # sqlalchemy
2.4.3 # flask_sqlalchemy

Хотя я также сталкивался с ошибкой с версиями 1.3.17 и 2.4.1.

1 Ответ

12 голосов
/ 14 июля 2020

После некоторых экспериментов выяснилось, что проблема связана с некоторым изменением между python:3.8.3-slim и python:3.8.4-slim.

Чтобы воспроизвести, обратите внимание, что это работает:

$ docker run --rm -it python:3.8.3-slim …

Где это не так:

docker run --rm -it python:3.8.4-slim …

Похоже, эта ошибка / исправление является причиной проблемы: https://bugs.python.org/issue39960

...