3 """Diagnoses the current protobuf situation. 5 Protocol buffer needs to be properly installed for Caffe2 to work, and 6 sometimes it is rather tricky. Specifically, we will need to have a 7 consistent version between C++ and python simultaneously. This is a 8 convenience script for one to quickly check if this is so on one's local 12 [set your environmental variables like PATH and PYTHONPATH] 13 python scripts/diagnose_protobuf.py 18 from subprocess
import Popen, PIPE
22 import google.protobuf
23 python_version = google.protobuf.__version__
24 python_protobuf_installed =
True 26 print(
"DEBUG: cannot find python protobuf install.")
27 python_protobuf_installed =
False 30 protoc_name =
'protoc.exe' 32 protoc_name =
'protoc' 35 p = Popen([protoc_name,
'--version'], stdout=PIPE, stderr=PIPE)
36 out, err = p.communicate()
38 print(
'DEBUG: did not find protoc binary.')
39 print(
'DEBUG: out: ' + out)
40 print(
'DEBUG: err: ' + err)
41 native_protobuf_installed =
False 44 print(
'DEBUG: protoc returned a non-zero return code.')
45 print(
'DEBUG: out: ' + out)
46 print(
'DEBUG: err: ' + err)
47 native_protobuf_installed =
False 49 tmp = re.search(
'\d\.\d\.\d', out)
51 native_version = tmp.group(0)
52 native_protobuf_installed =
True 54 print(
'DEBUG: cannot parse protoc version string.')
55 print(
'DEBUG: out: ' + out)
56 native_protobuf_installed =
False 58 PYTHON_PROTOBUF_NOT_INSTALLED =
""" 59 You have not installed python protobuf. Protobuf is needed to run caffe2. You 60 can install protobuf via pip or conda (if you are using anaconda python). 63 NATIVE_PROTOBUF_NOT_INSTALLED =
""" 64 You have not installed the protoc binary. Protoc is needed to compile Caffe2 65 protobuf source files. Depending on the platform you are on, you can install 67 (1) Mac: using homebrew and do brew install protobuf. 68 (2) Linux: use apt and do apt-get install libprotobuf-dev 69 (3) Windows: install from source, or from the releases here: 70 https://github.com/google/protobuf/releases/ 73 VERSION_MISMATCH =
""" 74 Your python protobuf is of version {py_ver} but your native protoc version is of 75 version {native_ver}. This will cause the installation to produce incompatible 76 protobuf files. This is bad in general - consider installing the same version. 77 """.format(py_ver=python_version, native_ver=native_version)
80 if not python_protobuf_installed:
81 print(PYTHON_PROTOBUF_NOT_INSTALLED)
83 if not native_protobuf_installed:
84 print(NATIVE_PROTOBUF_NOT_INSTALLED)
86 if python_protobuf_installed
and native_protobuf_installed:
87 if python_version != native_version:
88 print(VERSION_MISMATCH)
90 print(
'All looks good.')