Как я могу обновить Perl в Windows без потери модулей? - PullRequest
10 голосов
/ 23 сентября 2008

На работе я использую Perl 5.8.0 в Windows.

Когда я впервые включил Perl, я перешел на CPAN, загрузил все исходники, сделал несколько изменений (в файле .MAK? Для поддержки потоков или тому подобное) и установил nmake / nmake test / nmake. , Затем постепенно я скачал отдельные модули из CPAN и исполнил танец nmake.

Итак, я хотел бы перейти на более свежую версию, но новая не должна нарушать существующие скрипты. Примечательно, что в новой версии должно быть установлено несколько «используемых» модулей, которые я установил.

Какой самый надежный (и самый простой) способ обновить мою текущую версию, гарантирующий, что все, что я сделал с помощью nmake dance, останется там после обновления?

Ответы [ 7 ]

9 голосов
/ 23 сентября 2008

Как уже отмечалось, начните с установки нового perl в отдельном месте. У меня установлено несколько perl, каждый из которых полностью отделен от всех остальных.

Для этого вам придется самостоятельно настраивать и компилировать исходные коды. Когда вы запустите configure, вы получите возможность указать установщик. Я дал подробные инструкции по этому вопросу в «Компиляции моего собственного Perl» в выпуске Perl Review 2008 года . В Эффективное программирование на Perl также есть пункт, который показывает, как это сделать.

Теперь вернитесь к исходному дистрибутиву и запустите cpan -a, чтобы создать файл автопакета. Это документ Pod, в котором перечислены все дополнительные компоненты, которые вы установили, и CPAN.pm понимает, как использовать это для переустановки всего.

Чтобы установить вещи в новый perl, используйте путь этого perl, чтобы запустить CPAN.pm и установить файл autobundle, который вы создали. CPAN.pm получит правильные пути установки из конфигурации этого Perl.

Смотрите вывод, чтобы убедиться, что все идет хорошо. Этот процесс не будет устанавливать те же версии модулей, но последние версии.

Что касается Strawberry Perl , есть «портативная» версия, которую вы можете установить где-нибудь, кроме расположения по умолчанию. Таким образом, вы можете получить новый Perl на съемном носителе. Вы можете протестировать его где угодно, не нарушая локальную установку. Я не думаю, что это вполне готово для общего использования. Инструмент Berrybrew может помочь вам в этом.

Удачи,:)

8 голосов
/ 23 сентября 2008

Я бы серьезно подумал над использованием Strawberry Perl .

4 голосов
/ 23 сентября 2008

Вы можете установить вторую версию Perl в другом месте. Вам придется переустановить все неосновные модули в новую версию. Как правило, различные версии Perl не совместимы в двоичном формате, что может быть проблемой, если у вас есть какие-либо программно-ориентированные библиотеки, использующие компоненты XS. Чистые модули Perl не должны быть затронуты.

3 голосов
/ 23 сентября 2008

Если вы останетесь в пределах 5.8, все установленные модули, которые содержат расширения XS (двоичные), продолжат работать, поскольку двоичная совместимость гарантируется в той же серии 5.8. Если вы перешли на 5.10, вам придется перекомпилировать любые модули, содержащие компоненты XS.

Все, что вам нужно сделать, это убедиться, что в новой сборке перечислены предыдущие каталоги включения в массиве @INC (который используется для поиска модулей).

Судя по звукам, я думаю, что вы находитесь в Windows, и в этом случае текущие пути @INC можно просмотреть с помощью

perl -le "print for @INC"

Убедитесь, что вы указали новую версию Perl в другом каталоге. Оно будет счастливо сосуществовать с предыдущей версией, и это позволит вам выбрать, какая установка Perl будет использоваться; это просто вопрос прохождения вашего заказа PATH. Как только Perl-интерпретатор запускается, он знает, где искать остальные его модули.

Strawberry Perl, пожалуй, самый хороший дистрибутив для Windows в наши дни.

1 голос
/ 23 сентября 2008

Я думаю, что ответ на этот вопрос включает виртуализацию некоторого вида:

  1. Установите точную копию вашей текущей живой машины. Обновите Perl, используя те же каталоги и структуры, которые вы используете в данный момент.
  2. Просмотрите ваши сценарии, проверяя их на новом образе.
  3. Как только вы будете счастливы, нажмите переключатель.

Мысль, стоящая за этим, заключается в том, что, вероятно, существуют всевозможные тонкие зависимости и предположения, о которых вы даже не думали. Хотя это маловероятно, последняя версия определенного модуля (возможно, даже базовый модуль, хотя это даже более маловероятно) может иметь незначительную разницу по сравнению с той, которую вы использовали. Если вы не исчерпывающе изучили всю кодовую базу, вполне возможно, что есть определенный модуль, который требуется только при определенных обстоятельствах.

Вы можете попытаться определить это, составив список всех ваших сценариев - список, который вы должны иметь в любом случае, поскольку весь ваш код находится под контролем версий (вы используете контроль версий, например Subversion , да?) - и итерация по нему, выполнение perl -c для каждого сценария. например этот скрипт . Такого рода автоматическое тестирование бесценно: вы можете запустить его, пойти выпить кофе или еще что-нибудь и вернуться, чтобы проверить, все ли работает. Первые несколько раз вы, вероятно, найдете неясный модуль, о котором вы забыли, и это хорошо: весь смысл в автоматизации заключается в том, чтобы вам не приходилось выполнять тяжелую работу проверка каждого скрипта.

1 голос
/ 23 сентября 2008

Когда я это сделал, я установил новый в отдельный каталог. Есть небольшая путаница, связанная с запуском двух версий, но это определенно помогает убедиться, что все работает в первую очередь, и обеспечивает быстрый способ вернуться к старой в крайнем случае. Я также настроил Apache для запуска двух отдельных сервисов, чтобы я мог без проблем использовать новый Perl в одном сервисе, не касаясь рабочего на старом Perl.

Задним числом, вероятно, намного мудрее установить на отдельный компьютер и провести там тестирование. Запишите все изменения конфигурации, которые вам нужно сделать.

Не уверен насчет того, чтобы создать его самостоятельно - я всегда использовал только предварительно упакованные двоичные файлы для Windows.

Я не уверен, что точно понимаю, о чем вы спрашиваете. У вас есть список изменений, которые вы сделали в 5.8 make-файле? Или вопрос как получить такой список? Вы также спрашиваете, как узнать, какие пакеты выше базовой установки вы получили от CPAN? Вы также спрашиваете, как проверить, что ваши пользовательские изменения не повредят эти пакеты, если вы снова получите их из CPAN?

0 голосов
/ 04 января 2011

Почему вы не используете ActivePerl и его инструмент "ppm" для (пере) установки модулей?

alt text

...