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 16 from __future__
import absolute_import
17 from __future__
import division
18 from __future__
import print_function
19 from __future__
import unicode_literals
22 from subprocess
import Popen, PIPE
26 import google.protobuf
27 python_version = google.protobuf.__version__
28 python_protobuf_installed =
True 30 print(
"DEBUG: cannot find python protobuf install.")
31 python_protobuf_installed =
False 34 protoc_name =
'protoc.exe' 36 protoc_name =
'protoc' 39 p = Popen([protoc_name,
'--version'], stdout=PIPE, stderr=PIPE)
40 out, err = p.communicate()
42 print(
'DEBUG: did not find protoc binary.')
43 print(
'DEBUG: out: ' + out)
44 print(
'DEBUG: err: ' + err)
45 native_protobuf_installed =
False 48 print(
'DEBUG: protoc returned a non-zero return code.')
49 print(
'DEBUG: out: ' + out)
50 print(
'DEBUG: err: ' + err)
51 native_protobuf_installed =
False 53 tmp = re.search(
r'\d\.\d\.\d', out)
55 native_version = tmp.group(0)
56 native_protobuf_installed =
True 58 print(
'DEBUG: cannot parse protoc version string.')
59 print(
'DEBUG: out: ' + out)
60 native_protobuf_installed =
False 62 PYTHON_PROTOBUF_NOT_INSTALLED =
""" 63 You have not installed python protobuf. Protobuf is needed to run caffe2. You 64 can install protobuf via pip or conda (if you are using anaconda python). 67 NATIVE_PROTOBUF_NOT_INSTALLED =
""" 68 You have not installed the protoc binary. Protoc is needed to compile Caffe2 69 protobuf source files. Depending on the platform you are on, you can install 71 (1) Mac: using homebrew and do brew install protobuf. 72 (2) Linux: use apt and do apt-get install libprotobuf-dev 73 (3) Windows: install from source, or from the releases here: 74 https://github.com/google/protobuf/releases/ 77 VERSION_MISMATCH =
""" 78 Your python protobuf is of version {py_ver} but your native protoc version is of 79 version {native_ver}. This will cause the installation to produce incompatible 80 protobuf files. This is bad in general - consider installing the same version. 81 """.format(py_ver=python_version, native_ver=native_version)
84 if not python_protobuf_installed:
85 print(PYTHON_PROTOBUF_NOT_INSTALLED)
87 if not native_protobuf_installed:
88 print(NATIVE_PROTOBUF_NOT_INSTALLED)
90 if python_protobuf_installed
and native_protobuf_installed:
91 if python_version != native_version:
92 print(VERSION_MISMATCH)
94 print(
'All looks good.')