NameError:使用python3编译时未定义name'unicode'

时间:2015-10-29 19:39:31

标签: python python-3.x protocol-buffers caffe

我正在尝试用python3编译caffe。编译后,当我尝试导入caffe时,我得到了以下错误

In [1]: import caffe
Failed to include caffe_pb2, things might go wrong!
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-1cca3aa1f8c5> in <module>()
----> 1 import caffe

/library_install_dir/caffe/python/caffe/__init__.py in <module>()
      1 from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver
      2 from ._caffe import set_mode_cpu, set_mode_gpu, set_device, Layer, get_solver, layer_type_list
----> 3 from .proto.caffe_pb2 import TRAIN, TEST
      4 from .classifier import Classifier
      5 from .detector import Detector

/library_install_dir/caffe/python/caffe/proto/caffe_pb2.py in <module>()
    975       name='type', full_name='caffe.FillerParameter.type', index=0,
    976       number=1, type=9, cpp_type=9, label=1,
--> 977       has_default_value=True, default_value=unicode("constant", "utf-8"),
    978       message_type=None, enum_type=None, containing_type=None,
    979       is_extension=False, extension_scope=None,

NameError: name 'unicode' is not defined
  • 问题是Python 3将unicode类型重命名为str,旧的str类型已被字节替换。

我试图修改proto / caffe_pb2,但它无效。

任何与caffe有类似问题的人。我有一个工作caffe与我的裸金属支持python3现在我正在尝试将它停靠。

提前致谢。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。 unicode适用于Python2。在make pycaffe命令之后,您可以检查/opt/caffe-1.0/python/caffe/proto/caffe_pb2.py文件,如果文件中有unicode,问题仍然存在。您可以删除caffe_pb2.py并再次运行make pycaffe

解决方案是安装protocprotobuf的适当版本。

A)安装protoc&gt; = 2.6.1

(protoc == 2.5.0无效)

https://cuongba.com/protocol-buffers-and-rabbitmq-on-ubuntu-14-04-part-1

wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
tar -xzvf protobuf-2.6.1.tar.gz
cd protobuf-2.6.1
sudo ./configure
make
make check
sudo make install
sudo ldconfig
protoc --version

B)安装protobuf&gt; = 3.4.0

pip3 install protobuf>=3.4.0

答案 1 :(得分:0)

在Python 3中,Str默认为Unicode, 所以,在第977行,请用str函数替换unicode函数

--> 977       has_default_value=True, default_value=Str("constant", "utf-8"),  ## Replace with Str

希望这会有所帮助!!