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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:09:23