簡體   English   中英

導入錯誤:無法從“google.protobuf.internal”導入名稱“builder”

[英]ImportError: cannot import name 'builder' from 'google.protobuf.internal'

我正在關注這個視頻 22:22,發現這段代碼有錯誤:

!python {SCRIPTS_PATH + '/generate_tfrecord.py'} -x {IMAGE_PATH + '/train'} -l {ANNOTATION_PATH + '/label_map.pbtxt'} -o {ANNOTATION_PATH + '/train.record'}
!python {SCRIPTS_PATH + '/generate_tfrecord.py'} -x{IMAGE_PATH + '/test'} -l {ANNOTATION_PATH + '/label_map.pbtxt'} -o {ANNOTATION_PATH + '/test.record'}

發布確切的錯誤消息:

Traceback (most recent call last):
  File "D:\info\1 Master\2 semster\RealTimeObjectDetection-main\Tensorflow\scripts\generate_tfrecord.py", line 29, in <module>
    from object_detection.utils import dataset_util, label_map_util
  File "C:\Users\bachir\PycharmProjects\pythonProject\venv\lib\site-packages\object_detection\utils\label_map_util.py", line 29, in <module>
    from object_detection.protos import string_int_label_map_pb2
  File "C:\Users\bachir\PycharmProjects\pythonProject\venv\lib\site-packages\object_detection\protos\string_int_label_map_pb2.py", line 5, in <module>
    from google.protobuf.internal import builder as _builder
ImportError: cannot import name 'builder' from 'google.protobuf.internal' (C:\Users\bachir\PycharmProjects\pythonProject\venv\lib\site-packages\google\protobuf\internal\__init__.py)

首先我嘗試下載一些丟失的包但同樣的問題,我想幫忙

由於某種原因,從 TensorFlow 創建的protobuf包中缺少builder.py文件。 解決方法是簡單地將 builder.py 的最新副本從protobuf存儲庫復制到本地驅動器

wget https://raw.githubusercontent.com/protocolbuffers/protobuf/main/python/google/protobuf/internal/builder.py -O [PROTOBUF_PATH]/lib/python3.8/site-packages/google/protobuf/internal/builder.py

您需要升級到最新版本的protobuf包:

pip install --upgrade protobuf

原因是 Python 類從 Protobuf v3.20.0 開始被簡化。 直接從發行說明中說:

Protobuf python 生成的代碼被簡化了。 描述符和消息類的定義現在是在 internal/builder.py 中動態創建的。 消息類的插入點被丟棄。

這就解釋了為什么生成的 Python 代碼現在引用了一個builder模塊,如果你沒有更新到最新版本的protobuf包,它就找不到它。 這在發行說明中沒有解釋,但我驗證自己如果升級protobuf包它可以工作。

按着這些次序:

  1. 安裝最新的 protobuf(在我的例子中是 4.21.1)

pip install protobuf

  1. ...\Lib\site-packages\google\protobuf\internal中的builder.py復制到您的計算機(假設是“文檔”)
  2. 安裝與您的項目兼容的 protobuf,對我來說是 3.19.4

pip install protobuf==3.19.4

  1. 將 builder.py 從(比如說“文檔”)復制到Lib\site-packages\google\protobuf\internal
  2. 運行你的代碼

就像維克多回答的那樣。 在安裝 protobuf builder.py 時由於某種原因在相關包中缺少 tensforflow。

https://raw.githubusercontent.com/protocolbuffers/protobuf/main/python/google/protobuf/internal/builder.py

復制並粘貼此代碼並將其制作成 a.py 然后將該文件粘貼到 {your env location}/site-packages/google/protobuf/internal/builder.py

一切都奏效了。

對我有用的是:

  1. pip 卸載 protobuf
  2. conda 安裝 protobuf

(我正在使用 miniconda3)

在遵循“測試安裝”選項卡上的對象檢測 TensorFlow 教程時遇到同樣的問題。

如上所述,不知道為什么 protobuff 3.19.6 沒有帶來 builder.py,所以你只需要升級到更高版本(比如說 4.21.1)復制builder.py然后降級到兼容 tensorFlow 的 protobuff(在我的案例 3.19.6) 並粘貼。 在我的例子中,我使用的是 conda,所以 builder.py 文件位置是:

C:\Users\ {userX} \miniconda3\envs\ {envname} \Lib\site-packages\google\protobuf\internal

之后,測試運行順利=)。

最好!

我可以通過不使用最新版本的 protoc 編譯器而是使用舊版本 v3.19.4 編譯我的 .proto 文件來解決這個問題(請參閱https://github.com/protocolbuffers/protobuf/releases )。

因為descriptor_pb2.py是從protoc生成的。 所以你需要保持你的構建系統和運行系統之間的兼容性。

一言以蔽之,確保您的 protoc 的版本小於或等於 protobuf 的版本。

僅供參考,您可以直接從“https://github.com/protocolbuffers/protobuf/releases”下載相應的協議

從你安裝 python 的地方復制 builder.py 文件,或者如果你使用 ananconda 可能是 C:\Users\bachir\anaconda3\Lib\site-packages\google\protobuf\internal 中的 builder.py,復制它然后粘貼到 C:\用戶\bachir\PycharmProjects\pythonProject\venv\lib\site-packages\google\protobuf\internal

分兩步解決:

  1. pip 卸載protobuf

  2. pip 安裝 protobuf==4.21

我在 Windows 11 上使用 Anaconda Prompt 和 Environment。

我通過安裝兩個 Protobuf 的相同版本解決了這個問題,一個是 Anaconda Protobuf 安裝,另一個是我從https://github.com/protocolbuffers/protobuf/releases安裝的

為了制作相同的版本,我重新安裝了與 Anaconda Protoc 安裝兼容的 Protobuf 版本。

您可以使用pip list查看您的 Protobuf 是什么

是的,我使用 python 3.8。 我看到https://grpc.io/docs/languages/python/quickstart/並運行示例代碼但失敗了。

我知道有很多原因。 好吧,沒有靈丹妙葯::}

我通過升級 protobuf 解決了它

我通過以下鏈接下載 builder.py 解決了這個問題

https://github.com/protocolbuffers/protobuf/tree/main/python/google/protobuf/internal

然后,我將該文件復制到以下文件夾(C:\Anaconda3\envs\tensorflow - 我激活的環境)\Lib\site-packages\google\protobuf\internal

沒有足夠的聲譽來評論得分最高的答案。

我的...\Lib\site-packages\google\protobuf\internal 中缺少 Builder.py

關於為什么的任何線索?

暫無
暫無

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

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