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

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

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Удачи, :)

Другие советы

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

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

Если вы остаетесь в рамках версии 5.8, все установленные модули, содержащие расширения XS (бинарные), продолжат работать, поскольку двоичная совместимость гарантируется в пределах той же серии 5.8.Если вы перешли на версию 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.

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

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

alt text

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top