+++
编辑:在把这个问题放到网上很长一段时间后,我注意到这是Can't connect to MongoDB 2.0.5 database with pymongo 2.2的副产品,它说在安装pymongo之前必须先安装bson。我在这里要求的不是这个已经知道的解决方案,而是这个所需的安装订单。我还添加了一个小东西,我将"bson“模块安装为"pybson",这使得区分这两个包的import bson
名称冲突成为可能。
+++
我正在使用一种解决方法来避免pymongo的bson模块和bson (py-bson on GitHub) bson模块的名称冲突:我正在将bson包安装为pybson,参见https://github.com/py-bson/bson/issues/70。
从pip install of eve package installs bson and pymongo which breaks pymongo的回答中,我们得出了主要的想法:
pymongo
不把bson
作为依赖项,它只是有自己的bson
实现。问题是,pymongo
将其bson
安装为site-packages/
中的顶级目录,从而覆盖现有的bson
。
但这并不能解释为什么InstallOrder1.bson 2. pymongo解决了这个问题,相反,您会期望它完全相反!
在我的例子中,我已经安装了一个新的系统,使用anaconda作为基础。我使用pip install pybson
安装了bson,它说:
跟踪(最近一次调用):
文件"",第1行,导入pybson #,与bson相同
文件"C:\Users\Admin\anaconda3\lib\site-packages\pybson_init_.py",第23行,从.objectid导入ObjectId
文件"C:\Users\Admin\anaconda3\lib\site-packages\pybson\objectid.py",第30行,从bson.py3compat导入PY3、bytes_from_hex、string_type、text_type
ModuleNotFoundError:没有名为“bson”的模块
除了pybson之外,在安装pymongo之后,使用conda install pymongo
,import pybson
语句可以工作。为什么?
发布于 2020-08-27 16:23:23
这个问题所引用的观点必须反过来说:pip install bson
在pip install pymongo
之后干扰pymongo的bson依赖,这样pymongo的bson模块就不再工作了。这可能不是因为bson覆盖了pymongo的bson依赖,而是因为名称冲突:两个包都使用相同的bson模块' bson ',这导致了同样的效果,就好像bson覆盖了pymongo的bson。
奇怪的是:正如问题所述,除了(py)bson之外,还必须安装pymongo。这暗示了bson在自己的包中使用了pymongo的bson依赖项。
由于在pip install bson
之后使用pip install pymongo
安装bson会干扰pymongo的bson,请参阅Can't connect to MongoDB 2.0.5 database with pymongo 2.2,我们可以假设两个bson模块之间存在名称冲突,而bson模块是最后一个安装的bson模块。看起来(py)bson包除了自己的bson模块外,还需要一个占主导地位的pymongo依赖项,并且(py)bson在其内部脚本中将pymongo依赖项作为import bson
导入,即使它有bson模块本身。我不知道这种控制是由覆盖引起的,还是仅仅是python环境的问题。前者更有可能发生,因为安装顺序(第一次pip install bson
,之后是pip install pymongo
),在您用pip install pybson
而不是pip install bson
安装bson时,就变得无关紧要了,请参阅pip install of eve package installs bson and pymongo which breaks pymongo。
https://stackoverflow.com/questions/63067922
复制相似问题