Примечание: Я только начинаю с человечностью и Python, у меня есть обширный опыт кодирования на других языках под окнами.
Так, я хочу установить этот пакет:
https://github.com/google/protobuf/tree/master/python
Я пытался установить его следующим образом: Я пытался загрузить код в этом репозитории и затем установить его. Таким образом, сначала я загрузил код с помощью SVN:
svn checkout https://github.com/google/protobuf/trunk/python
Затем я пытался установить его использование:
sudo python setup.py install
Это дало следующий вывод:
running install
running bdist_egg
running egg_info
creating protobuf.egg-info
writing requirements to protobuf.egg-info/requires.txt
writing protobuf.egg-info/PKG-INFO
writing namespace_packages to protobuf.egg-info/namespace_packages.txt
writing top-level names to protobuf.egg-info/top_level.txt
writing dependency_links to protobuf.egg-info/dependency_links.txt
writing manifest file 'protobuf.egg-info/SOURCES.txt'
reading manifest file 'protobuf.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no previously-included files found matching 'google/protobuf/internal/*_pb2.py'
warning: no previously-included files found matching 'google/protobuf/internal/*.proto'
warning: no previously-included files matching '*_test.py' found under directory 'google'
warning: no previously-included files matching '*_test.proto' found under directory 'google'
warning: no previously-included files matching 'unittest*_pb2.py' found under directory 'google'
warning: no previously-included files matching '*.dll' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '*.pyo' found anywhere in distribution
warning: no previously-included files matching '*.so' found anywhere in distribution
writing manifest file 'protobuf.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
Generating google/protobuf/descriptor_pb2.py...
Can't find required file: ../src/google/protobuf/descriptor.proto
Ручной контроль моих папок и исходного GitHub подтвердил, что "descriptor.proto" действительно не существовал. Я действительно находил строки 128-129 из setup.py:
# Generate necessary .proto file if it doesn't exist.
generate_proto("../src/google/protobuf/descriptor.proto")
Так, я предполагаю, что этот файл должен был быть создан автоматически, но не был по некоторым причинам. Кто-либо знает почему?
править:
Я также пытался просто использовать:
sudo python setup.py build
Это дало так же:
running build
running build_py
Generating google/protobuf/descriptor_pb2.py...
Can't find required file: ../src/google/protobuf/descriptor.proto
редактирование 2: Я теперь вытянул весь репозиторий и повторно выполнился
sudo python setup.py build
Это дало как вывод:
running build
running build_py
Generating google/protobuf/descriptor_pb2.py...
google/protobuf/descriptor.proto:381:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:381:12: Expected field name.
google/protobuf/descriptor.proto:439:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:439:12: Expected field name.
google/protobuf/descriptor.proto:537:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:537:12: Expected field name.
Соответствующие строки в descriptor.proto файле:
строка 381:
reserved 38;
строка 439:
reserved 8; // javalite_serializable
строка 537:
reserved 4; // removed jtype
Это также единственные времена этот "зарезервированный [число]" синтаксис, используется, таким образом, я думаю, что этот синтаксис мог бы быть причиной проблемы так или иначе. У кого-либо есть какие-либо идеи об этом?
Таким образом, я получил ответ от кого-то еще, вот то, что наконец работало на меня:
Первый получают чистую загрузку всего кода (не только часть Python, как я первоначально сделал):
$ git clone https://github.com/google/protobuf.git
Затем установка некоторые зависимости и компиляция:
$ cd protobuf/
$ apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ libopenblas-dev git autoconf automake libtool curl make g++ unzip
Затем следуют за src/README.md:
$ ./autogen.sh
$ ./configure
$ make
$ make check
$ sudo make install
Затем устанавливают часть Python, как описано в python/README.md
$ cd python
$ python setup.py build
$ python setup.py test
$ python setup.py install
Проблема - Вы только вытянутая часть репозитория (protobuf/python
), но установка ищет файлы в другом каталоге (protobuf/src/google/protobuf/descriptor.proto
)
, Поэтому просто вытягивают в полном репозитории:
$ git clone https://github.com/google/protobuf.git
Затем:
$ cd protobuf/python
И следуют инструкциям по установке в README.md
.