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)
执行更新命令
- 卸载冲突版本:
pip uninstall -y SQLAlchemy Flask-SQLAlchemy
- 安装指定兼容版本:
pip install SQLAlchemy==1.4.49 Flask-SQLAlchemy==2.5.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
相关产品推荐
相关产品推荐

