Как обновить Perl в Windows без потери модулей?

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

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

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

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

7 ответов


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

для этого вам придется настроить и скомпилировать источники самостоятельно. При запуске configure, вы получите возможность указать установщик. Я дал подробные инструкции для этого в "компиляции моего собственного Perl" в весенний выпуск 2008 года обзора Perl. Есть также пункт в Эффективный Perl Программирование что показывает вам, как это сделать.

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

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

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

Как Клубничный Perl есть "портативная" версия, которую вы можете установить где-то кроме расположения по умолчанию. Таким образом, вы можете иметь новый perl на съемных носителях. Вы можете протестировать его в любом месте, не нарушая локальную установку. Я не думаю, что это вполне готов для общего использования. The Berrybrew может помочь вам справиться с этим.

удачи :)


Я бы серьезно рассмотрел возможность использования Клубничный Perl.


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


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

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

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

perl -le "print for @INC"

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

клубничный Perl, вероятно, самый хороший распространение в Windows в эти дни для прокатки собственных.


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

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

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

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


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

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

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

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


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

alt text