如何在不丢失模块的情况下在Windows上更新Perl?

时间:2008-09-22 20:39:23

标签: windows perl upgrade perl-module

在工作中我在Windows上使用Perl 5.8.0。

当我第一次打开Perl时,我去了CPAN,下载了所有的源代码,做了一些更改(在.MAK文件中?支持线程,或类似的东西),并做了nmake / nmake test / nmake install 。然后,我一点一点地从CPAN下载了各个模块并完成了nmake舞。

所以,我想升级到更新版本,但新版本不能破坏任何现有脚本。值得注意的是,我安装的一堆“使用”模块必须安装在新版本中。

更新我当前版本最可靠(也是最简单)的方法是什么,确保我在更新后仍然可以使用nmake跳舞的所有内容?

7 个答案:

答案 0 :(得分:9)

正如其他人所说,首先将新的perl安装在一个单独的位置。我安装了几个perls,每个都与其他所有perls完全分开。

要做到这一点,您必须自己配置和编译源代码。当您运行configure时,您将有机会指定安装程序。我在the Spring 2008 issue of The Perl Review的“编译我自己的Perl”中给出了详细说明。 Effective Perl Programming 中还有一个项目,向您展示如何操作。

现在,返回原始发行版并运行cpan -a以创建自动整理文件。这是一个Pod文档,列出了您安装的所有额外内容,CPAN.pm了解如何使用它来重新安装所有内容。

要在新的perl中安装东西,请使用该perl的路径启动CPAN.pm并安装您创建的自动捆绑文件。 CPAN.pm将从perl的配置中获得正确的安装路径。

观察输出以确保顺利进行。此过程不会安装相同版本的模块,而是安装最新版本。

对于Strawberry Perl,除了默认位置之外,还可以安装“便携式”版本。这样你就可以在可移动媒体上使用新的perl。您可以在任何地方进行测试,而不会干扰本地安装。我不认为它已经为一般用途做好了准备。 Berrybrew工具可以帮助您管理它。

祝你好运,:))

答案 1 :(得分:8)

我会认真考虑使用Strawberry Perl

答案 2 :(得分:4)

您可以在其他位置安装第二版Perl。您必须将任何非核心模块重新安装到新版本中。通常,不同版本的Perl不是二进制兼容的,如果您有任何使用XS组件的程序特定库,这可能是一个问题。纯Perl模块不应受到影响。

答案 3 :(得分:3)

如果您保持在5.8轨道内,则所有包含XS(二进制)扩展的已安装模块将继续工作,因为二进制兼容性在同一5.8系列中得到保证。如果您移动到5.10,则必须重新编译包含XS组件的任何模块。

您需要做的就是确保新版本在其@INC数组(用于查找模块)中列出以前的include目录。

通过它的声音,我认为你在Windows上,在这种情况下,可以用

查看当前的@INC路径
perl -le "print for @INC"

确保将新的Perl版本定位到另一个目录中。它会愉快地共存 使用以前的版本,这将允许您选择使用哪个Perl安装;这只是让您的PATH订单整理出来的问题。一旦perl解释器启动,它就知道在哪里寻找其余的模块。

草莓Perl可能是最近在Windows上推出的最好的发行版。

答案 4 :(得分:1)

当我这样做时,我将较新的一个安装到一个单独的目录中。运行两个版本会有一些混乱,但它确实有助于确保一切正常工作,并提供一种快速切换回旧版本的方法。我还设置了Apache来运行两个独立的服务,所以我可以在一个服务中使用新的Perl,而无需接触旧Perl上的生产服务。

事后看来,安装在单独的计算机上并在那里进行测试可能会更加明智。记录您需要进行的每个配置更改。

不确定自己构建它 - 我总是只使用Windows的预先打包的二进制文件。

我不确定我到底知道你在问什么。您是否有对5.8 makefile所做的更改列表?或者问题是如何获得这样的清单?您是否还在询问如何找出您从CPAN获得的基本安装之上的哪些包?您是否也在询问如何测试您的自定义更改是否会破坏这些包,如果您再次从CPAN获取它们?

答案 5 :(得分:1)

我认为对此的答案涉及某种类型的virtualisation

  1. 设置当前直播机的精确副本。升级Perl,使用与您目前使用的目录位置和结构相同的目录。
  2. 浏览您在新图片上测试它们的脚本。
  3. 一旦你开心,请翻开开关。
  4. 这背后的想法是,你可能没有想到各种微妙的依赖和假设。虽然不太可能,但特定模块的最新版本(可能甚至是核心模块,尽管更不可能)与您使用的模块相比可能会有微妙的差异。除非你已经详尽地浏览了整个代码库,否则很可能只有在特定情况下才需要特定的模块。

    您可以通过构建所有脚本的列表来尝试发现这一点 - 无论如何,您应该拥有的列表,所有代码都在版本控制下(您 使用版本控制,例如Subversion,是吗?) - 并迭代它,在每个脚本上运行perl -c。例如this script。这种自动化测试是非常宝贵的:你可以设置它运行,去咖啡或其他什么,然后回来检查一切是否有效。前几次你可能会发现一个你忘记的模糊模块,这很好:自动化这一点的全部意义在于不需要做苦差事检查每个脚本。

答案 6 :(得分:0)

为什么不使用ActivePerl及其“ppm”工具来(重新)安装模块?

alt text