모듈 손실 없이 Windows에서 Perl을 업데이트하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/117481

문제

직장에서는 Windows에서 Perl 5.8.0을 사용하고 있습니다.

Perl을 처음 설치했을 때 CPAN으로 가서 모든 소스를 다운로드하고 몇 가지 사항을 변경했습니다(.MAK 파일에서?스레드 등을 지원하기 위해), nmake / nmake test / nmake install을 수행했습니다.그런 다음 CPAN에서 개별 모듈을 조금씩 다운로드하고 nmake 댄스를 수행했습니다.

그래서 최신 버전으로 업그레이드하고 싶지만 새 버전이 기존 스크립트를 손상시키지 않아야 합니다.특히, 내가 설치한 여러 "사용" 모듈은 새 버전에 설치되어야 합니다.

nmake 댄스로 수행한 모든 작업이 업데이트 후에도 그대로 유지되도록 현재 버전을 업데이트하는 가장 안정적이고 쉬운 방법은 무엇입니까?

도움이 되었습니까?

해결책

다른 사람들이 지적했듯이, 새로운 Perl을 별도의 장소에 설치하는 것부터 시작하십시오.나는 여러 개의 Perls를 설치했는데, 각 Perls는 다른 Perls와 완전히 분리되어 있습니다.

그렇게 하려면 소스를 직접 구성하고 컴파일해야 합니다.당신이 달릴 때 configure, 설치 프로그램을 지정할 수 있는 기회가 제공됩니다.나는 이에 대한 자세한 지침을 "나만의 Perl 컴파일"에서 설명했습니다. The Perl Review 2008년 봄호.아이템도 들어있어요 효과적인 Perl 프로그래밍 그것은 당신에게 그것을하는 방법을 보여줍니다.

이제 원래 배포판으로 돌아가서 다음을 실행하세요. cpan -a 자동 번들 파일을 생성합니다.이것은 설치한 모든 추가 항목을 나열하는 Pod 문서이며 CPAN.pm은 이를 사용하여 모든 것을 다시 설치하는 방법을 이해합니다.

새 Perl에 항목을 설치하려면 해당 Perl의 경로를 사용하여 CPAN.pm을 시작하고 생성한 자동 번들 파일을 설치하십시오.CPAN.pm은 해당 Perl 구성에서 올바른 설치 경로를 가져옵니다.

출력을 보고 일이 잘 진행되는지 확인하세요.이 프로세스에서는 동일한 버전의 모듈이 설치되지 않고 최신 버전이 설치됩니다.

에 관해서는 딸기 펄, 기본 위치 이외의 곳에 설치할 수 있는 "휴대용" 버전이 있습니다.그렇게 하면 이동식 미디어에 새로운 Perl을 가질 수 있습니다.로컬 설치를 방해하지 않고 원하는 곳 어디에서나 테스트할 수 있습니다.하지만 일반적인 용도로는 아직 준비가 되지 않은 것 같습니다.그만큼 베리브루 도구를 사용하면 이를 관리하는 데 도움이 될 수 있습니다.

행운을 빌어요, :)

다른 팁

나는 심각하게 사용을 고려할 것입니다 딸기 펄.

Perl의 두 번째 버전을 다른 위치에 설치할 수 있습니다.핵심 모듈이 아닌 모듈을 새 버전에 다시 설치해야 합니다.일반적으로 Perl의 다른 버전은 바이너리와 호환되지 않습니다. 이는 XS 구성 요소를 활용하는 프로그램별 라이브러리가 있는 경우 문제가 될 수 있습니다.순수 Perl 모듈은 영향을 받지 않습니다.

5.8 트랙 내에 머무르면 동일한 5.8 시리즈 내에서 바이너리 호환성이 보장되므로 XS(바이너리) 확장이 포함된 설치된 모든 모듈이 계속 작동합니다.5.10으로 이동한 경우 XS 구성 요소가 포함된 모든 모듈을 다시 컴파일해야 합니다.

당신이 해야 할 일은 새 빌드가 @INC 배열(모듈을 찾는 데 사용됨)에 이전 포함 디렉터리를 나열하는지 확인하는 것뿐입니다.

들어보니 Windows를 사용하고 있는 것 같습니다. 이 경우 현재 @INC 경로는 다음을 사용하여 볼 수 있습니다.

perl -le "print for @INC"

다른 디렉토리에서 새 Perl 버전을 대상으로 지정했는지 확인하세요.이전 버전과 행복하게 공존 할 것이며,이를 통해 어떤 Perl 설치가 사용되는지 선택할 수 있습니다.그것은 단지 PATH 순서를 정리하는 문제일 뿐입니다.Perl 인터프리터는 시작되자마자 나머지 모듈을 찾을 위치를 압니다.

Strawberry Perl은 아마도 요즘 Windows에서 직접 배포할 수 있는 가장 좋은 배포판일 것입니다.

나는 이것에 대한 대답이 다음과 관련이 있다고 생각합니다. 가상화 어떤 종류의:

  1. 현재 라이브 머신의 정확한 사본을 설정하십시오.현재 사용하고 있는 것과 동일한 디렉토리 위치 및 구조를 사용하여 Perl을 업그레이드하십시오.
  2. 새 이미지에서 스크립트를 테스트해 보세요.
  3. 만족스러우면 스위치를 켜세요.

이에 대한 생각은 아마도 당신이 생각하지 못한 모든 종류의 미묘한 종속성과 가정이 있을 것이라는 것입니다.가능성은 희박하지만, 특정 모듈의 최신 버전(아마도 핵심 모듈일 수도 있지만 그럴 가능성은 훨씬 낮음)은 사용 중인 모듈과 미묘한 차이가 있을 수 있습니다.전체 코드베이스를 철저하게 살펴보지 않은 이상 특정 상황에서만 필요한 특정 모듈이 있을 가능성이 높습니다.

모든 스크립트 목록을 작성하여 이를 찾아낼 수 있습니다. 이 목록은 버전 관리 하에 있는 모든 코드에 따라 어쨌든 있어야 합니다( ~이다 버전 제어 사용(예: 파괴, 네?) - 그리고 이를 반복하면서 실행합니다. perl -c 각 스크립트에.예를 들어 이 스크립트.이러한 종류의 자동화된 테스트는 매우 중요합니다.실행하도록 설정하고 커피를 마시러 갔다가 돌아와서 모든 것이 제대로 작동하는지 확인할 수 있습니다.처음 몇 번은 잊어버렸던 모호한 모듈을 발견할 수도 있지만 괜찮습니다.자동화의 요점은 다음과 같습니다. 모든 단일 스크립트를 확인하는 고된 작업을 수행할 필요가 없습니다.

내가 그것을했을 때 최신 것을 별도의 디렉토리에 설치했습니다.두 가지 버전을 실행하면 약간의 혼란이 있지만 먼저 모든 것이 제대로 작동하는지 확인하는 데 도움이 되며 긴급 상황에서 이전 버전으로 빠르게 전환할 수 있는 방법을 제공합니다.또한 두 개의 별도 서비스를 실행하도록 Apache를 설정했기 때문에 이전 Perl의 프로덕션 서비스를 건드리지 않고도 하나의 서비스에서 최신 Perl을 사용할 수 있었습니다.

돌이켜보면 별도의 컴퓨터에 설치하고 거기서 테스트를 수행하는 것이 훨씬 더 현명할 것입니다.필요한 모든 구성 변경 사항을 기록하십시오.

직접 구축할지는 잘 모르겠습니다. 저는 항상 Windows용으로 미리 패키지된 바이너리를 사용했습니다.

질문하신 내용을 정확히 이해했는지 잘 모르겠습니다.5.8 makefile에 대한 변경 사항 목록이 있습니까?아니면 그러한 목록을 얻는 방법이 문제입니까?또한 CPAN에서 얻은 기본 설치 이상의 패키지를 찾는 방법을 묻고 있습니까?또한 CPAN에서 패키지를 다시 가져온 경우 사용자 지정 변경 사항으로 인해 해당 패키지가 손상되지 않는지 테스트하는 방법도 묻고 있습니까?

ActivePerl과 해당 "ppm" 도구를 사용하여 모듈을 (재)설치하는 것은 어떻습니까?

alt text

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