2012-02-17 4 views
7

Ours는 Python 상점입니다. 우리는 사내에서 개발 된 다른 파이썬 패키지를 가지고 있으며 고객의 환경 (머신)에 배치 될 것입니다.다중 운영 체제에서 (및) 복수의 운영 체제에서 Python 배포판 (계란)을 만드는 최상의 방법은 무엇입니까

이것은 개발 및 출시주기가 어떻게 이루어지는지를 보여줍니다.

개발자가 패키지의 "테스트"를 완료하면 패키지의 배포판 (알 파일)이 준비되고 중앙 보관 장소로 푸시됩니다. 우리 소프트웨어를 고객에게 배포하고자 할 때 동일한 배포판 (계란 파일)이 다운로드되어 설치됩니다.

여러 운영 체제에서 "테스트"가 발생한다고 가정하면 (플랫폼 간 API 호환성 확인) 배포본을 준비하고 중앙 보관 장소로 푸시하는 것이 가장 좋습니다.

아카이브 서버에 운영 체제 별 달걀을 가지고있는 것이 가장 좋습니다 (예 : samplepkg-1.0.0.win32.egg 및 samplepkg-1.0.0.linux.egg). 어떻게 이런 방식으로 준비 할 수 있는지 잘 모르겠습니다. setuptools를 사용합니다.) 또는 플랫폼간에 API가 동일하기 때문에 하나의 달걀이 있습니까? 공동체가 따르는 다른 관행? 경우

답변

5

당신은 하나의 패키지를 사용할 수 있습니다 패키지는 모든 대상 플랫폼에서 사용할 수 없습니다/클래스 기능을 사용하지 않는

  1. (예를 들면 장에게 버전의 파이썬 표준 라이브러리 참조의 36 ~ 39 참조 2.7.2).
  2. 모든 플랫폼 용으로 컴파일해야하는 C/C++로 작성된 확장을 사용하고 있지 않습니다.

모든 대상 플랫폼에서 사용할 수없는 OS 관련 기능을 사용하지 않는 것이 좋습니다. 표준 라이브러리는 그 점에서 꽤 잘 설명되어 있습니다.

2

이 경우 Roland가 위에 언급 한 이유 때문에 단일 패키지를 사용하는 것이 더 복잡 할 것이라고 생각합니다. 개발 환경에서 플랫폼 별 코드 (예 : C/C++로 작성된 확장/라이브러리)가있는 별도의 플랫폼에 별도의 폴더를 가질 수 있습니다. 별도의 달걀을 만들기 위해이 폴더 안에 setuptools를 모방해야하지만, 궁극적으로 모든 것을 하나의 패키지에 넣으려고하는 것보다 복잡하지는 않습니다.

두 경우 모두 distutils (http://docs.python.org/distutils/)는 물론 표준 라이브러리의 설명서를 읽으면 솔루션을 찾을 수 있습니다.

1

플랫폼 별 난은 C 코드가 포함 된 패키지를 배포하기위한 용도로만 제공됩니다. 그렇지 않으면 계란 파일 자체가 플랫폼 독립적이며 플랫폼 독립적 인 하나의 계란 만 배포하면됩니다.

라이브러리 및 플러그인을 찾기 위해 자동 설치 도구 또는 pkg_resources 런타임 API를 사용하는 경우 실제로 모든 달걀을 단일 디렉토리에 덤프 할 수 있으며 설치 도구 또는 런타임 API는 설치할 계란을 가져올 것입니다 에서.

tl; dr version : setuptools가 알을 만드는 방법은 배포해야하는 방법입니다. 플랫폼에 종속적 인 계란을 플랫폼에 종속 된 계란으로 만들거나 그 반대로 만들려고하면 약간의 고통을 겪을 수 있습니다.;-)

0

파이썬 모듈 만 사용하는 경우 파이썬에서 동일한 차이 (파이썬 표준 라이브러리) 또는 개별 파일 (파이썬)을 모두 숨겨 둡니다.

모듈을 컴파일 한 경우 다소 번잡합니다.

./lib/display.py # frontend, platform-independent 
./lib.linux-x86_64-2.6/_display.so 
./lib.linux-armv5tejl-2.6/_display.so 

그리고 프로그램의 시작의 시작 부분에서이 코드 :

sys.path.append("lib.%s-%s-%s.%s" % ((posix.uname()[0].lower(), 
             posix.uname()[4]) 
            +sys.version_info[:2])) 
이 당신은 같은 구조를 포장 할 수

나는 확장 컴파일 필요로하는 프로젝트의 다음 디렉토리 구조를 사용 이것은 .gg로도, 우편으로는 안전하지 않다고 지정하는 한.

관련 문제