문제

개발을 위해 런타임 환경을 정의해야합니다. 첫 번째 아이디어는 물론 바퀴를 재창조하지 않는 것입니다. Macports를 다운로드하고 Easy_Install을 사용하여 Fink를 시도했습니다. 나는 항상 문제가있었습니다. 예를 들어, MacPorts 설치 프로그램이 GCC43을 다운로드하여 설치하려고하기 때문에 Scipy를 컴파일 할 수는 없지만 Snow Leopard에서는 컴파일하지 않습니다. 이 문제에 대한 버그가 열려 있지만 기본적으로 런타임을 사용할 수 있도록 묶여 있습니다.

내가 얼마 전에 배운 기술은 명확하게 지정된 버전의 라이브러리 및 유틸리티로 런타임/libs를 다운로드하고 구축하기 위해 makefile을 작성하는 것이 었습니다. 이것은 Macports/Fink/Apt 접근 방식을 선행하지만, 모든 것을 손으로해야하지만 훨씬 더 많은 제어력이 있습니다. 물론, 런타임이 커지면 자체적으로 악몽이 될 수 있지만 문제를 발견하면 사용할 수 있습니다. patch 다운로드 된 패키지의 문제를 해결 한 다음 빌드하십시오.

여러 질문이 있습니다.

  • 개발을 위해 잘 정의 된 런타임/라이브러리 컬렉션을 준비하는 기술은 무엇입니까?
  • Macports/Fink/어떤 것이 잘못되었을 때 동일한 유연성을 허용합니까?
  • Makefile 솔루션을 고려할 때, 내 소프트웨어가 다운로드 할 때, 내 개발 환경과 사용자의 기계의 실제 플랫폼 간의 잠재적 인 문제를 해결하는 것에 대한 귀하의 제안은 무엇입니까?

편집하다: 특히 이해하지 못하는 것은 다른 프로젝트가 나에게 힌트를주지 않는다는 것입니다. 예를 들어, 방금 의존성이 많은 복잡한 라이브러리 인 Scipy를 다운로드했습니다. 개발자는 작업하기 전에 모든 DEP 설정을 설정해야합니다. 그럼에도 불구하고 SVN에는이 환경을 만드는 것이 없습니다.

편집하다: 질문에 현상금을 추가했습니다. 나는 이것이 중요한 문제라고 생각하며 더 많은 답변을 얻을 가치가 있습니다. 나는 모든 문제와 솔루션에 대한주의를 기울인 실제 예제로 그 답을 가장 잘 고려할 것입니다.

현상금에 영감을주는 추가 질문 :

  • 환경에서 테스트를 수행합니까 (예 : 적절한 설치를 확인하기 위해 통합 기계에서)?
  • 배송 시간에 환경을 어떻게 포함합니까? C 인 경우 실행 파일을 실행하기 전에 LD_LIBRARY_PATH를 땜질하는 동적으로 연결하거나 동적 라이브러리를 배송합니까? Python, Perl 및 기타와 같은 문제는 어떻습니까?
  • 런타임을 고수하거나 시간이 지남에 따라 업데이트합니까? 종속성 라이브러리 또는 고정 버전의 "트렁크"패키지를 다운로드합니까?
  • Library Foo가 Python 2.5가 필요하지만 Python 2.4에서는 Python 2.5에서 작동하지 않기 때문에 Python 2.4에서 개발 해야하는 상황을 어떻게 처리합니까?
도움이 되었습니까?

해결책

우리는 다운로드 (주로 SVN을 통해)/구성/빌드의 모든 종속성을 생성하는 cmake 스크립트를 사용합니다. 왜 cmake인가? 멀티 플랫폼. 이것은 매우 잘 작동하며 SCONS/AUTOPAIN/CMAKE의 호출을 지원합니다. 여러 플랫폼 (Windows, MacOSX, Linux 변형)을 구축 할 때 운영 체제를 기반으로 다른 컴파일 플래그 등을 지원합니다. 일반적으로 라이브러리에는 기본 구성이 있으며 특수 구성이 필요한 시스템이 발생하면 구성이 특수 구성으로 대체됩니다. 이것은 꽤 잘 작동합니다. 우리는 실제로 우리의 목적에 맞는 준비된 솔루션을 찾지 못했습니다.

즉, 여러 운영 체제를 지원해야 할 때 회전 할 수있는 손잡이가 많이 있습니다. 의존성이 상당히 고정되어 있기 때문에 그것이 유지 관리가 될 것이라고 생각하지 않습니다 (라이브러리는 정기적으로 업그레이드되지만 새로운 것을 거의 소개하지 않습니다).

다른 팁

virtualenv 좋지만 마법을 할 수는 없습니다. 예를 들어 Python 2.4가 있어야하는 라이브러리를 사용하고 싶다면 그리고 절대적으로 2.5가 필요한 또 다른 것은 운이 좋지 않습니다. OS의 새로운 릴리스와 도구의 절반이있는 경우 virtualenv (또는 기타 도구)도 도움이되지 않을 수도 없습니다. 동일한 빌드 내에서 절대적으로 상충되는 요구), 다른 사람들은 인내심이 필요합니다 (필요한 모든 도구가 새로운 OS 릴리스에 포팅 될 때까지 이전 OS 릴리스를 고수하면됩니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top