[英]Importing caffe results in ImportError: “No module named google.protobuf.internal” (import enum_type_wrapper)
[英]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
包它可以工作。
按着這些次序:
pip install protobuf
...\Lib\site-packages\google\protobuf\internal
中的builder.py
復制到您的計算機(假設是“文檔”)
pip install protobuf==3.19.4
Lib\site-packages\google\protobuf\internal
就像維克多回答的那樣。 在安裝 protobuf builder.py 時由於某種原因在相關包中缺少 tensforflow。
復制並粘貼此代碼並將其制作成 a.py 然后將該文件粘貼到 {your env location}/site-packages/google/protobuf/internal/builder.py
一切都奏效了。
對我有用的是:
(我正在使用 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
分兩步解決:
pip 卸載protobuf
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.