问题:我正在尝试安装a Python3 port of Google Protocol Buffers。当我执行python3 setup.py test
时,我收到以下错误:
File "/[*snip*]/python3-protobuf-master/python/google/protobuf/unittest_custom_options_pb2.py", line 13
from . import google.protobuf.descriptor_pb2
^
SyntaxError: invalid syntax
然后我在Python3和Python2解释器中尝试了类似的语法并得到了同样的错误:
Python 3.2.3 (default, Jul 23 2012, 16:48:24)
[GCC 4.5.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from . import x.y
File "<stdin>", line 1
from . import x.y
^
SyntaxError: invalid syntax
问题: from . import abc.xyz
何时有效的Python语法,如果有的话?我有兴趣知道我下载的代码是否存在内在错误。
其他:我从this SO question.的答案中选择了GPB的这个Python3端口。它与GPB不是最新的,但我预计它仍然可以正常运行。如果您对GPB的Python3端口有更好的了解,请告诉我。
答案 0 :(得分:0)
您只能在import
之后命名顶级对象或嵌套模块。将x
名称移至from
子句:
from .x import y
或原始问题:
from .google.protobuf import descriptor_pb2
.proto file in question似乎未正确编译为Python。快速扫描显示this to be the case:
void Generator::PrintImports() const {
for (int i = 0; i < file_->dependency_count(); ++i) {
string module_name = ModuleName(file_->dependency(i)->name());
printer_->Print("try:\n");
printer_->Print(" from . import $module$\n", "module", module_name);
printer_->Print("except ImportError:\n");
printer_->Print(" import $module$\n", "module", module_name);
}
printer_->Print("\n");
}
您需要向项目提交错误报告。
答案 1 :(得分:0)
此问题已修复:请求请求:https://github.com/openx/python3-protobuf/pull/7