Как заменить пакет conda для libprotobuf на клонированную версию GitHub в среде conda? - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь установить caffe в среде conda. Caffe нужен пакет Google protobuf. У меня уже было git clone 'd protobuf, и оно есть в моих каталогах \usr. Однако когда я пытаюсь установить caffe в среде conda, установленная версия libprotobuf неправильно конвертирует файл proto в код c++.

Рассмотрим следующий код:

syntax = "proto2";

package test1;


message Datum {
  optional int32 channels = 1;
}

Когда я пытаюсь перевести его из моей среды base, все в порядке:

(base) me@balin:~/Projects/caffe$ make clean
(base) me@balin:~/Projects/caffe$ make superclean
Deleting the following generated files:
./temp5.pb.cc
./temp5.pb.h
(base) me@balin:~/Projects/caffe$ protoc --cpp_out=. temp5.proto
(base) me@balin:~/Projects/caffe$ g++ temp5.pb.cc -c
(base) me@balin:~/Projects/caffe$ 

Однако, когда я пробую то же самое в среде, которую я хочу использовать для caffe, я получаю такой результат:

(dnn_track5) me@balin:~/Projects/caffe$ make clean
(dnn_track5) me@balin:~/Projects/caffe$ make superclean
Deleting the following generated files:
./temp5.pb.cc
(dnn_track5) me@balin:~/Projects/caffe$ protoc --cpp_out=. temp5.proto
(dnn_track5) me@balin:~/Projects/caffe$ g++ temp5.pb.cc -c
temp5.pb.cc: In member function ‘virtual const char* test1::Datum::_InternalParse(const char*, google::protobuf::internal::ParseContext*)’:
temp5.pb.cc:150:58: error: ‘ReadVarint’ is not a member of ‘google::protobuf::internal’
           channels_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
                                                          ^~~~~~~~~~
temp5.pb.cc:150:58: note: suggested alternative: ‘ReadVarint32’
           channels_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
                                                          ^~~~~~~~~~
                                                          ReadVarint32

Все, что я могу сделать, - это заменить каждый файл в подкаталогах ~\anaconda2\envs\dnn_track5, которые были установлены conda, файлами, установленными при сборке protobuf из GitHub клона. Прав ли я в этом (сомневаюсь).

Как я могу создать среду conda, где я могу использовать caffe и при этом иметь работающий protobuf?

1 Ответ

0 голосов
/ 28 января 2020

Нет прямого способа использовать conda для установки непосредственно из репозитория github, поэтому стоит посмотреть, почему ваш код не работает в вашей caffe среде.

Начиная с Этот коммит (с октября 2019 г.) существует различие между

::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64

и

::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32

Когда вы conda install caffe, он загружает (по крайней мере для меня) libprotobuf-3.11.2, которая является самой последней версией с декабря 2019 г., поэтому версия, загруженная как зависимость для caffe, на самом деле является более новой, чем та, которую вы пытаетесь использовать в своем коде.

У вас есть несколько вариантов:

  1. Запросите указанную c версию protobuf с API, который вы хотите использовать. Т.е. 3.10.0, то есть с 3 октября 2019 года:

    conda create -n caffe -c conda-forge python=3.7 caffe libprotobuf=3.10.0

  2. Создайте собственный канал conda и вставьте туда свой собственный libprotobuf.tar.bz2

  3. Настройте свой код для использования самого последнего libprotobuf API
...