2008-09-22 3 views
9

На работе я использую Perl 5.8.0 для Windows.Как обновить Perl на Windows без потери модулей?

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

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

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

+0

Это может быть хорошей идеей, если кто-то меняет название этого на «Как обновить Perl на окнах», или что-то подобное. – 2008-09-22 22:03:02

+0

Я предлагаю «Как обновить Perl на Windows без потери модулей». Я начал давать свой ответ, а потом понял, что это не подходит, потому что мой ответ UNIX-only и требует переустановки всех ваших модулей (что, я думаю, будет требованием в любом случае). – skiphoppy 2008-09-24 19:10:37

+0

Спасибо за рекомендации по названию. Я отредактировал, чтобы отразить ваши предложения. – piCookie 2008-10-07 14:59:43

ответ

9

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

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

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

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

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

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

Удачи :)

1

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

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

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

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

+0

Учитывая большое количество модификаций, расфасовщики, вероятно, не будут работать. Я также установил в версии именованные папки и связал их с общей папкой R: \ PERL, чтобы переключиться. – piCookie 2008-09-22 20:48:05

+0

Изменения в файле make 5.8 не важны. Я больше спрашиваю, как найти, какие пакеты выше базовой установки, которую я получил. У меня много скриптов, которые говорят «use xxx», где xxx был загружен и встроен. Все они должны продолжать работать. – piCookie 2008-09-23 15:12:06

+0

Это может быть немного хромой, но вы можете использовать «Найти в файлах» TextPad или эквивалент для поиска всех ваших скриптов для «^ use». – Kev 2008-10-07 15:09:47

4

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

3

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

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

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

perl -le "print for @INC" 

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

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

1

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

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

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

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

0

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

alt text

Смежные вопросы