mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-21 05:34:18 +08:00
See https://github.com/pytorch/pytorch/pull/129751#issue-2380881501. Most changes are auto-generated by linter. You can review these PRs via: ```bash git diff --ignore-all-space --ignore-blank-lines HEAD~1 ``` Pull Request resolved: https://github.com/pytorch/pytorch/pull/129752 Approved by: https://github.com/ezyang, https://github.com/malfet
93 lines
2.9 KiB
Python
93 lines
2.9 KiB
Python
## @package diagnose_protobuf
|
|
# Module scripts.diagnose_protobuf
|
|
"""Diagnoses the current protobuf situation.
|
|
|
|
Protocol buffer needs to be properly installed for Caffe2 to work, and
|
|
sometimes it is rather tricky. Specifically, we will need to have a
|
|
consistent version between C++ and python simultaneously. This is a
|
|
convenience script for one to quickly check if this is so on one's local
|
|
machine.
|
|
|
|
Usage:
|
|
[set your environmental variables like PATH and PYTHONPATH]
|
|
python scripts/diagnose_protobuf.py
|
|
"""
|
|
|
|
import os
|
|
import re
|
|
from subprocess import PIPE, Popen
|
|
|
|
|
|
# Get python protobuf version.
|
|
try:
|
|
import google.protobuf
|
|
|
|
python_version = google.protobuf.__version__
|
|
python_protobuf_installed = True
|
|
except ImportError:
|
|
print("DEBUG: cannot find python protobuf install.")
|
|
python_protobuf_installed = False
|
|
|
|
if os.name == "nt":
|
|
protoc_name = "protoc.exe"
|
|
else:
|
|
protoc_name = "protoc"
|
|
|
|
try:
|
|
p = Popen([protoc_name, "--version"], stdout=PIPE, stderr=PIPE)
|
|
out, err = p.communicate()
|
|
except:
|
|
print("DEBUG: did not find protoc binary.")
|
|
print("DEBUG: out: " + out)
|
|
print("DEBUG: err: " + err)
|
|
native_protobuf_installed = False
|
|
else:
|
|
if p.returncode:
|
|
print("DEBUG: protoc returned a non-zero return code.")
|
|
print("DEBUG: out: " + out)
|
|
print("DEBUG: err: " + err)
|
|
native_protobuf_installed = False
|
|
else:
|
|
tmp = re.search(r"\d\.\d\.\d", out)
|
|
if tmp:
|
|
native_version = tmp.group(0)
|
|
native_protobuf_installed = True
|
|
else:
|
|
print("DEBUG: cannot parse protoc version string.")
|
|
print("DEBUG: out: " + out)
|
|
native_protobuf_installed = False
|
|
|
|
PYTHON_PROTOBUF_NOT_INSTALLED = """
|
|
You have not installed python protobuf. Protobuf is needed to run caffe2. You
|
|
can install protobuf via pip or conda (if you are using anaconda python).
|
|
"""
|
|
|
|
NATIVE_PROTOBUF_NOT_INSTALLED = """
|
|
You have not installed the protoc binary. Protoc is needed to compile Caffe2
|
|
protobuf source files. Depending on the platform you are on, you can install
|
|
protobuf via:
|
|
(1) Mac: using homebrew and do brew install protobuf.
|
|
(2) Linux: use apt and do apt-get install libprotobuf-dev
|
|
(3) Windows: install from source, or from the releases here:
|
|
https://github.com/google/protobuf/releases/
|
|
"""
|
|
|
|
VERSION_MISMATCH = f"""
|
|
Your python protobuf is of version {python_version} but your native protoc version is of
|
|
version {native_version}. This will cause the installation to produce incompatible
|
|
protobuf files. This is bad in general - consider installing the same version.
|
|
"""
|
|
|
|
# Now, give actual recommendations
|
|
if not python_protobuf_installed:
|
|
print(PYTHON_PROTOBUF_NOT_INSTALLED)
|
|
|
|
if not native_protobuf_installed:
|
|
print(NATIVE_PROTOBUF_NOT_INSTALLED)
|
|
|
|
if python_protobuf_installed and native_protobuf_installed:
|
|
if python_version != native_version:
|
|
print(VERSION_MISMATCH)
|
|
else:
|
|
print("All looks good.")
|