python3烧瓶应用程序中的pymongo导入错误

时间:2017-10-23 13:32:19

标签: python mongodb python-3.x pymongo pymongo-3.x

我有一个基于python flask的应用程序,它写入mongo数据库。

我正在使用python 3以及requirements.txt

Flask
Jinja2
Werkzeug
certifi
chardet
gunicorn
requests
flask_restful
flask
pymongo

我遇到了这个问题:

Traceback (most recent call last):
File "bin/app.py", line 4, in <module>
from helper import save_message_2_db
File "/app/bin/helper.py", line 1, in <module>
from database import DataAccess, MongoDB
File "/app/bin/database.py", line 1, in <module>
import pymongo
File "/app/.heroku/python/lib/python3.6/site-packages/pymongo/__init__.py", line 83, in <module>
from pymongo.collection import ReturnDocument
File "/app/.heroku/python/lib/python3.6/site-packages/pymongo/collection.py", line 21, in <module>
from bson.code import Code
File "/app/.heroku/python/lib/python3.6/site-packages/bson/code.py", line 19, in <module>
from bson.py3compat import string_type, PY3, text_type
ModuleNotFoundError: No module named 'bson.py3compat'

我想知道为什么会这样?

本节是我关注的内容

File "/app/.heroku/python/lib/python3.6/site-packages/pymongo/__init__.py", line 83, in <module>
from pymongo.collection import ReturnDocument
File "/app/.heroku/python/lib/python3.6/site-packages/pymongo/collection.py", line 21, in <module>
from bson.code import Code
File "/app/.heroku/python/lib/python3.6/site-packages/bson/code.py", line 19, in <module>
from bson.py3compat import string_type, PY3, text_type
ModuleNotFoundError: No module named 'bson.py3compat'

大多数互联网博客/链接告诉我bsonpymongo不能互相配合。 pymongo拥有自己的bson版本,我在requirements.txt中不需要它。

我正在寻求帮助,看看为什么会发生这种情况,以及如何重新解决这个问题。

更新#1

我正在使用pymongo-3.5.1,这就是问题仍然存在的地方。我只是降级到pymongo-3.5.0,问题就消失了。

这意味着我知道解决此问题的解决方法,但上游代码/包有一些需要修复的问题。

4 个答案:

答案 0 :(得分:5)

尝试同时卸载bsonpymongo

sudo pip uninstall bson
sudo pip uninstall pymongo

然后使用pip 重新安装pymongo

sudo pip install pymongo

答案 1 :(得分:1)

可能是某些程序包配置错误。如果bson包来自 mongo-python-driver很可能,因为在第19行中,导入语句from bson.py3compat import string_type, PY3, text_type存在。

但是文件py3compat.py似乎丢失了,它应该在code.py路径的bson旁边。

<强>更新

在问题更新后,让我们知道降级修复了问题并检查了两个版本之间的code changes,无法识别问题的相关更改。因此,它更能说明这些模块有问题,究竟是什么难以分辨。

答案 2 :(得分:1)

@bauman.spacethis线程中提供了有关此bson / pymongo导入问题的最多信息有用解释:

  

pymongo> = 2.7.1指令会覆盖您的bson安装

     

来自https://github.com/mongodb/mongo-python-driver

     

请勿从pypi安装“ bson”软件包。 PyMongo带有自己的bson软件包。 easy_install bsonpip install bson会安装与PyMongo不兼容的第三方程序包。

     

假设您确实要使用第三方bson,则需要

     

pip卸载bson(删除通过pymongo软件包降落的覆盖的bson)   pip install bson(重新安装py-bson软件包)   或者,您可以修补pymongo安装程序以删除collections.abc行(显然您不是真的需要它吗?),但是将生产打包代码弄乱是有问题的。

     

pymongo模块https://github.com/mongodb/mongo-python-driver/blob/master/bson/py3compat.py#L22-L25

     您尝试使用的

py-bson模块。 https://github.com/py-bson/bson/blob/master/bson/py3compat.py#L22-L24

答案 3 :(得分:1)

该解决方案已经被接受,但是我还是想写。我遇到了同样的问题,当我先安装bson和pymongo时,问题解决了,顺序很重要。