簡體   English   中英

eve 包的 pip 安裝會安裝 bson 和 pymongo,這會破壞 pymongo

[英]pip install of eve package installs bson and pymongo which breaks pymongo

我有一個使用 python eve 的項目,但最近我遇到了一個令人惱火的 pip 依賴問題。

我使用 requirements.txt 文件在 docker 容器中安裝依賴項

但是,安裝Eve軟件包會將pymongo作為依賴項安裝。 pymongo依賴於bson模塊,但依賴於 pypi bson模塊。 但是,pip 安裝了 pypi bson模塊,該模塊不適用於 pymongo,導致錯誤:

from bson.py3compat import abc, string_type, PY3, text_type
ImportError: cannot import name 'abc'

當 pymongo 被導入時。

我必須調整我的 dockerfile 來做這樣的事情:

RUN pip3 install -r requirements.txt
RUN pip3 uninstall bson --yes
RUN pip3 uninstall pymongo --yes
RUN pip3 install pymongo --user

有沒有辦法在管道文件或 requirements.txt 中指示它不需要嘗試從 pypi 安裝 bson?

pymongo沒有將bson作為依賴項,它只有自己的bson實現。 問題是pymongo將其bson作為頂級目錄安裝在site-packages/從而覆蓋了那里的任何現有bson

沒有簡單的方法可以解決這個問題。 嘗試聯系 pymongo 作者並說服他們停止覆蓋頂級 bson。

卸載 bson 和 pymongo。 使用pip install pybson將原始 bson 安裝為“pybson”,然后您可以同時使用兩者。 我已經從 (py)bson 項目中要求更改此名稱,請參閱https://github.com/py-bson/bson/issues/70 意外地或多或少與@phd 建議從 pymongo 提出的問題相反。 (py)bson 項目成員“在一分鍾內”完成了這項工作。

我知道您必須在之后安裝 pymongo 才能使import pybson工作,請參閱為什么我必須在 pybson (=bson, GitHub:py-bson) 之后安裝 pymongo 才能成功導入 pybson? . 當與原來安裝BSON同一賬戶pip install bson而不是pip install pybson ,那么你必須保持這個順序:1. BSON,2 pymongo,見無法與pymongo 2.2連接的MongoDB數據庫2.0.5

我還沒有測試過pip install pybson而不是pip install bson的技巧是否使它與您安裝的順序無關,1. pybson 和 2. pymongo 或反之亦然,但很可能因此順序不相關。

另一方面,通常保持這個安裝順序(1. (py)bson 和 2. pymongo)也沒有壞處,所以為什么不這樣做。 安裝為 pybson 和正確的安裝順序都可以解決問題,所以為什么不兩者都做。

如果將 bson 安裝為 pybson,則可以選擇在單個腳本中使用兩個包的兩個不同的 bson 模塊。 這就是為什么我建議:

  • 首先pip install pybson

  • 之后pip install pymongo

當您使用pip install pybson (不是 bson!)安裝 bson 包時,我檢查了是否需要這個確切的順序。 安裝pymongo后,我安裝了pybson。 它不會損害 pymongo 安裝,並且import pybson正常工作。 由此我們可以看出,在使用pybson技巧時,安裝的順序不再重要。

實際上,只需先pip install bson ,然后pip install pymongo 這對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM