3

我有一个基于 pythonflask的应用程序,它写入 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

4 回答 4

7

尝试同时卸载bsonpymongo

sudo pip uninstall bson
sudo pip uninstall pymongo

然后pymongo 使用 pip重新安装:

sudo pip install pymongo
于 2017-10-23T13:44:33.967 回答
4

卸载bsonpymongo。然后,安装bson第一个和pymongo第二个。

于 2019-06-28T07:21:49.830 回答
1

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

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

更新

在问题的更新让我们知道降级修复了问题并检查了两个版本之间的代码更改后,没有可识别到问题的相关更改。因此,它更表明模块有问题,具体是什么很难说。

于 2017-10-23T13:51:01.760 回答
1

@bauman.space在这个线程中提供了关于这个 bson/pymongo 导入问题的最有用和最有用的解释:

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

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

不要从 pypi 安装“bson”包。PyMongo 自带 bson 包;执行easy_install bsonpip install bson安装与 PyMongo 不兼容的第三方包。

假设你真的想使用 3rd 方 bson,你需要

pip uninstall bson(删除通过 pymongo 包登陆的覆盖 bson) pip install bson(重新安装 py-bson 包)或者你可以修补 pymongo install 以删除 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

于 2018-11-27T02:01:45.303 回答