2013-11-27 2 views
4

파이썬 패키지에는 python-protobuf (Python2-protobuf-2.5.0, 아치 리눅스)로 컴파일 된 많은 파일이 포함되어 있으며, 우분투 서버 12.04.3에 패키지를 설치했습니다. 파이썬 - protobuf-2.4.1), 코드를 실행하려고 다음과 같은 오류 충돌 :다른 버전의 python protobuf를 처리하는 방법

from google.protobuf.internal import enum_type_wrapper 
ImportError: cannot import name enum_type_wrapper 

내 패키지에 protobuf 모듈이 protobuf-2.5.0으로 컴파일되어 있기 때문에 생각을 그들은하지 않습니다 protobuf-2.4.1로 작업하십시오.

내 코드가 실행되는 환경에 대해 잘 모르지만 protobuf의 버전은 다를 수 있습니다. protobuf 2.4와 2.5 모두로 내 패키지 작업을 수행하는 방법은 무엇입니까?

(가능한 방법 : 내 패키지에 두 개의 protobuf 라이브러리 세트 (2.4.1로 컴파일 됨, 다른 하나는 2.5.0으로 컴파일 됨)를 포함하고 런타임에 google.protobuf 버전을 가져오고 가져올 protobuf 라이브러리를 선택하십시오

답변

3

install_requires=['protobuf>=2.5.0'] 목록의 setup.py에서 작동 될 protobuf의 버전을 지정해야합니다. Python 패키지를 사용하면 ==을 사용하여 패키지와 함께 실행될 이름이나 정확한 버전을 넣을 수 있습니다. 특정 버전에 대해서도 !=을 지정할 수 있다고 생각합니다.

setup.py으로 패키징하지 않는 경우 virtualenv를 설정하고 install_requires.txt 파일을 프로젝트의 루트에있는 모든 특정 python 패키지 및 버전과 함께 넣어야합니다.

처럼 보일 수도 : 당신이 그들의 VIRTUALENV를 활성화하기 위해 배포 할 그런 사람

$ cd ../project 
$ virtualenv project_venv 
$ source project_venv/bin/activate 
$ cd project 
$ pip install protobuf>=2.5.0 
$ pip freeze > ./requirements.txt 

:

$ pip install -r requirements.txt

하는 패키지와 함께 설치하여 신선한 VIRTUALENV에서 작동 확인 그 방법. 이것은 setup.py를 통해 설치하기 전에 확인하는 것도 좋습니다. virtualenv 컨텍스트에서 신선한 요구 사항을 충족하는 사람이 누구나 작동하도록하려면 sudo python setup.py install 또는 python setup.py install을 사용해야합니다.

$ deactivate 
:

당신과 함께 VIRTUALENV 컨텍스트를 종료 할 수 있습니다

0

패키지와 함께 protobuf 런타임 라이브러리 사본을 포함하는 것이 가장 좋을 수 있으며, 생성 된 코드의 버전과 일치하는지 확인할 수 있습니다.

또 다른 옵션은 설치 프로세스의 일부로 protoc을 호출하므로 호스트에서 사용할 수있는 버전을 얻을 수 있습니다.

생성 된 코드의 여러 버전을 패키징하는 것이 좋은 생각이라고 생각하지 않습니다. 다음 protobuf 릴리스가 나올 때 다시 문제가 발생합니다.

관련 문제