You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.7下sqlalchemy模块__all__属性缺失的AttributeError求助

运行测试文件时出现AttributeError,需适配Python3.7调整依赖版本

环境信息

  • Python版本:3.7
  • 本地依赖包版本:
aniso8601==9.0.1
appnope==0.1.3
attrs==23.1.0
backcall==0.2.0
blinker==1.6.3
cffi==1.15.1
click==8.1.7
decorator==5.1.1
Flask==2.2.0
Flask-DebugToolbar==0.14.1
flask-restx==0.5.1
Flask-SQLAlchemy==3.0.5
Flask-WTF==1.1.1
greenlet==3.0.3
importlib-metadata==6.7.0
importlib-resources==5.12.0
ipython==7.34.0
ipython-genutils==0.2.0
itsdangerous==2.1.2
jedi==0.19.1
Jinja2==3.1.2
jsonschema==4.17.3
MarkupSafe==2.1.3
matplotlib-inline==0.1.6
packaging==23.2
parso==0.8.3
pexpect==4.9.0
pickleshare==0.7.5
pkgutil_resolve_name==1.3.10
prompt-toolkit==3.0.43
psycopg2-binary==2.9.9
ptyprocess==0.7.0
pycparser==2.21
Pygments==2.17.2
pyrsistent==0.19.3
pytz==2023.3.post1
simplegeneric==0.8.1
six==1.16.0
SQLAlchemy==2.0.23
traitlets==5.9.0
typing_extensions==4.7.1
wcwidth==0.2.12
Werkzeug==2.2.3
WTForms==3.0.1
zipp==3.15.0

报错信息

Failed to import test module: test_forms
Traceback (most recent call last):
  File "/usr/lib/python3.10/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/usr/lib/python3.10/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/home/jkelly/Python/Flask/database-dj/database-dj/playlist-app/tests/test_forms.py", line 17, in <module>
    from app import app
  File "/home/jkelly/Python/Flask/database-dj/database-dj/playlist-app/app.py", line 5, in <module>
    from models import db, connect_db, Playlist, Song, PlaylistSong
  File "/home/jkelly/Python/Flask/database-dj/database-dj/playlist-app/models.py", line 5, in <module>
    db = SQLAlchemy()
  File "/home/jkelly/.local/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 680, in __init__
    _include_sqlalchemy(self, query_class)
  File "/home/jkelly/.local/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 79, in _include_sqlalchemy
    for key in module.__all__:
AttributeError: module 'sqlalchemy' has no attribute '__all__'

已尝试操作

  • 切换到Python3.10后无法识别app模块;因团队要求必须使用Python3.7,需通过调整依赖包版本解决问题。

解决方案

核心问题分析

报错根源是Python3.7不支持SQLAlchemy2.0+版本,且Flask-SQLAlchemy3.0.x专为适配SQLAlchemy2.0设计,在Python3.7环境下两者存在兼容性冲突,导致代码访问sqlalchemy.__all__时触发AttributeError。

调整依赖版本

修改依赖配置(或直接通过pip安装)以下包:

  • 将SQLAlchemy==2.0.23替换为SQLAlchemy==1.4.49(1.4系列是支持Python3.7的最后稳定版本)
  • 将Flask-SQLAlchemy==3.0.5替换为Flask-SQLAlchemy==2.5.1(适配SQLAlchemy1.4和Python3.7)

执行更新命令

  1. 卸载冲突版本:
pip uninstall -y SQLAlchemy Flask-SQLAlchemy
  1. 安装指定兼容版本:
pip install SQLAlchemy==1.4.49 Flask-SQLAlchemy==2.5.1
  1. 验证安装结果:
pip list | grep -E "SQLAlchemy|Flask-SQLAlchemy"

额外兼容检查

若后续仍出现其他依赖报错:

  • greenlet==3.0.3不支持Python3.7,可降级为greenlet==1.1.3
  • 确保importlib-metadata版本不超过6.x(当前6.7.0符合要求,支持Python3.7)

内容的提问来源于stack exchange,提问作者Jessica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:17:41