2011-04-21 2 views
8

파이썬 3을 사용하여 응용 프로그램을 개발하고 있습니다. 개발 프로세스 및 최종 사용자 배포에 타사 라이브러리를 사용하는 것이 가장 좋은 방법은 무엇입니까? 이러한 제한 조건 내에서 작업하고 있습니다.파이썬 3에서 배포 할 타사 라이브러리 번들을위한 모범 사례

  • 팀의 개발자는 라이브러리의 버전이 동일해야합니다.
  • 이상적인 솔루션은 Windows와 Linux 모두에서 작동합니다.
  • 나는 우리 자신의 소프트웨어를 사용하기 전에 사용자가 소프트웨어를 설치하는 것을 피하고 싶습니다. 즉, 우리 제품을 사용하기 전에 제품 A와 제품 B를 설치할 필요가 없습니다.
+0

. 저는 Python으로 raytracer를 만들고 있었고 PIL을 사용하여 이미지를 작성했습니다. Apple이 Mac OS에서 PIL을 제공하지 않기 때문에, Mac으로 옮길 때 raytracer가 완전히 파손되었습니다. 라이브러리를 많이 사용하지 않으면 제거하고 고유 한 솔루션을 작성하십시오. – Blender

답변

1

모범 사례는 없지만 사람들이 따라야 할 몇 가지 트랙이 있습니다. 상업 제품 유통에 관해서는 다음이 있습니다 :

를 개발 프로세스와 관련하여 자신의 패키지 서버

관리, 그것은 로컬 패키지 서버에서 dev에 상자 업데이트가 중 하나에 일반적입니다 . 이를 통해 종속성 목록을 "동결"(즉, 업스트림 업데이트를 중지 함)하여 모든 사용자가 동일한 버전에 있도록 할 수 있습니다. 특정 시간에 업데이트하고 개발자를 업데이트하여 모든 사람을 사로 잡도록 할 수 있습니다.

고객 설치의 경우 일반적으로 설치 스크립트를 작성합니다. 동시에 모든 패키지를 수집하고 libs를 설치할 수 있습니다. 고객이 이미 다른 버전을 사용하고있을 수 있으므로 새 Python 또는 표준 라이브러리를 설치하는 데 문제가있을 수 있습니다. 일반적으로 패키지를 시스템 패키지와 분리하기 위해 샌드 박스에 설치할 수 있습니다. 이것은 Windows보다 Linux에서 더 많은 문제입니다.

툴체인은

다른 옵션은 각각의 OS를 지원하기위한 툴체인을 만드는 것입니다. 툴체인은 모든 의존성입니다 (기본 OS 라이브러리는 glibc까지 포함되지 않음).이 툴체인은 패키지 화되어 개발자 고객에게 배포됩니다. 도구 모음의 모범 사례는 다음과 같습니다.

  • 혼동을 막기 위해 실행 파일을 변경하십시오. (예 : python -> pkg_python)
  • 우발적 인 사용을 막기 위해 .../bin 디렉토리에 설치하지 마십시오. (즉, 리눅스에서는 .../libexec 아래에 설치할 수 있습니다. /opt도 개인적으로 싫어하지만 사용됩니다.)
  • 올바른 위치에 lib를 설치하여 lib/python/site-packages 아래에 PYTHONPATH를 사용할 필요가 없습니다.
  • 소스 파일을 실행 파일에 대해 .py 배포 파일을 배포 스크립트가 적절하게 재배치 할 수 있도록 배포하십시오.
  • 패키지 형식이 OS 기본 패키지해야한다 (레드햇 -> RPM, 데비안 -> DEB, 승 -> MSI) 나는이 문제 쇼까지 했어
0

가정하면 제 3 자 라이브러리 의 distutils을 사용하고, setup.py에서 필요한 버전을 지정 pypi에서 사용할 수 있습니다.

+0

글쎄, 고마워,하지만 그건 내 목록에서 # 3을 위반합니다. 클라이언트에 인터넷 연결이 없다고 가정합니다. – Dewfy

+0

사용자가 인터넷에 연결되어 있지 않은 경우 솔루션이 간단합니다. 모든 필요한 라이브러리를 번들로 묶지 않고도이를 해결할 수는 없습니다. – geoffspear

+0

+1 번들. 그러나 도서관에서 그렇게하기를 원한다면 잘 모르겠습니다. – Blender

1
  • 개발자의 경우 PIPrequirements file을 사용하십시오.
  • 최종 사용자의 경우 요구 사항을 setup.py으로 지정하십시오.
+0

글쎄, 고마워,하지만 그건 내 목록에서 # 1, # 3을 위반한다. 클라이언트에 인터넷 연결이 없다고 가정합니다. 그리고 개발자는 항상 (??? ??? SVN 저장소가 될 수도 있습니다) – Dewfy

+0

에서 고정 된 버전을 가져야합니다. 특히 다른 플랫폼에서 컴파일해야 할 경우 크로스 플랫폼을 개발하고 테스트하는 경우 타사 모듈을 자신의 SVN 저장소에 배치하는 것을 권장합니다. 귀하의 요구 사항을 충족시키지 못하는 @ vartec의 제안에 관해서는 당신이 실수했다고 생각합니다. 요구 사항 파일은 해당 모듈의 모듈 및 버전을 지정할 수 있으므로 요구 사항을 정확하게 충족시킵니다. 또한 자신의 프로젝트에 다른 프로젝트를 포함 시키면 라이센스 조항을 위반하지 않아야합니다. –

+0

@StephenPaulger - 우리 프로젝트는 소스로 배포되므로 다른 LGPL 라이브러리 소스를 포함하도록 위반하지 않습니다. 당신은 내 질문에 빚을졌지만 여전히 열렸습니다. 3D 파티를 임베딩하는 올바른 기술 솔루션은 무엇입니까? – Dewfy

3

을 사용하여 라이브러리의 달걀 파일을 만들 수 있습니다. 단, 달걀 형식에서는 사용할 수 없다고 가정합니다. 그런 다음 계란을 소프트웨어 옆에 묶어서 설치하거나 설치 경로에 있는지 확인해야합니다.

이것은 약간의 복잡성이 있습니다. 예를 들어 라이브러리에 C 확장이있는 경우, 달걀은 플랫폼에 따라 달라 지지만, 제 경험상 이것은 Python에서 가장 널리 받아 들여지는 '번들링'수단입니다.

이것은 파이썬의 약점 중 하나입니다. 제 3 자 생태계는 최종 사용자 라기보다는 개발자를 목표로합니다.

+0

은 최종 사용자 취약점에 대해 매우 동의합니다. Windows 기반 최종 사용자가 소프트웨어를 양도 할 때 소프트웨어 도구와 파이프 라인을 작성하여 체계적인 방법으로 정리할 때 많은 어려움을 겪고 있습니다. –