Manjaro Linux下Flask-PyMongo与bson语法错误问题排查
Flask项目Manjaro Linux环境搭建SyntaxError问题解决
在Mac和Ubuntu上重复3-4次成功搭建的Flask开发环境,在Manjaro Linux上使用Python3.6的conda环境运行时出现语法错误。搭建步骤如下:
- 安装Anaconda
- 创建Python3.6的conda环境:
conda create -n MyEnv python=3.6 pip - 激活环境后执行:
pip install -r requirements.txt - 运行项目:
python runwserver.py
运行时触发的错误:
Traceback (most recent call last): File "runwserver.py", line 1, in <module> from wserver import app File "/home/user/Development/flask_project/wserver/__init__.py", line 5, in <module> import wserver.appinit File "/home/user/Development/flask_project/wserver/appinit.py", line 2, in <module> from flask.ext.pymongo import PyMongo File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 656, in _load_unlocked File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible File "/home/user/anaconda3/envs/Py36/lib/python3.6/site-packages/flask/exthook.py", line 62, in load_module __import__(realname) File "/home/user/anaconda3/envs/Py36/lib/python3.6/site-packages/flask_pymongo/__init__.py", line 29, in <module> from bson.errors import InvalidId File "/home/user/anaconda3/envs/Py36/lib/python3.6/site-packages/bson/__init__.py", line 341 except struct.error, e: ^ SyntaxError: invalid syntax
项目的requirements.txt内容:
alembic==0.8.2 bcrypt==3.1.1 cffi==1.8.3 et-xmlfile==1.0.1 Flask==0.10.1 Flask-Bcrypt==0.7.1 Flask-HTTPAuth==3.3.0 Flask-Login==0.3.0 Flask-Migrate==1.6.0 Flask-PyMongo==0.3.1 Flask-Script==2.0.5 Flask-SQLAlchemy==2.0 Flask-WTF==0.12 gevent==1.1.2 greenlet==0.4.10 gunicorn==19.6.0 itsdangerous==0.24 jdcal==1.3 Jinja2==2.8 Mako==1.0.2 MarkupSafe==0.23 openpyxl==2.4.0 pip==10.0.1 pycparser==2.14 pymongo==2.9 pyserial==3.1.1 python-editor==0.4 python-dotenv==0.20.0 pytz==2015.6 setuptools==39.0.1 six==1.10.0 SQLAlchemy==1.0.8 Werkzeug==0.10.4 WTForms==2.0.2 boto3 botocore
问题原因
错误中的except struct.error, e:是Python2专属语法,Python3已废弃该写法(要求使用except struct.error as e:)。而指定的pymongo==2.9是仅兼容Python2的旧版本,其附带的bson模块使用了Python2语法,因此在Python3.6环境中触发语法错误。
解决方案
移除requirements.txt中的pymongo==2.9行,重新执行pip install -r requirements.txt。此时pip会自动安装与Python3.6兼容的pymongo版本(3.x及以上版本全面支持Python3),对应的bson模块将使用Python3兼容语法,问题即可解决。
也可以直接指定兼容版本,将pymongo==2.9替换为pymongo>=3.0,确保安装的版本适配Python3环境。
内容的提问来源于stack exchange,提问作者giyoda
相关产品推荐
相关产品推荐

