如何扩展二进制perl分布

时间:2013-10-17 12:44:19

标签: oracle perl deployment cpan

我运行一个名为“Senora”的开源项目,该项目是用perl编写的,并且是oracle数据库的东西。直到最近它才开始使用oracle附带的perl发行版。

但最近我尝试添加更多功能,我需要LibXML。我个人在工作时运行Strawberry perl,添加LibXML没问题。但是,我的用户没有他们的个人perls,他们必须与他们在机器上找到的任何东西一起生活(oracle perl总是在那里)。

我已经在我的Senora树中添加了一个lib目录,并在那里放了一些普通的perl模块,oracle perl没有提供。这有效。

但是我怎么处理编译代码?我觉得很想从我的草莓树上复制dll,但这感觉很讨厌。所有这些代码都没有针对oracle perl编译。

我也很想给我的用户提供完整的草莓树。这太丑了。

那么我还有什么其他选择可以在我的Senora发行版中添加“只是缺少什么”,所以它与oracle perl一起运行?

2 个答案:

答案 0 :(得分:2)

TL; DR:当每个人都有完整的perl安装时,通过CPAN分发Perl模块很有趣。对于任何其他用例,这很糟糕。

  • Perl程序通常通过CPAN分发,CPAN提供自动依赖安装。但是,某些模块需要一个可用的C工具链进行安装。许多用户在没有这种能力的情况下运行残缺的perls。这里唯一的解决方案是打包预编译文件,但是必须为每个操作系统和每个perl配置单独完成。这是一些操作系统供应商(如Debian或RedHat)和一些Perl供应商(如ActiveState)所做的。

    这些供应商中的每一个都提供了从Perl模块构建自己的软件包的说明,然后可以使用它们各自的软件包管理器进行安装。

  • 如果目标系统确实有C工具链,那么使用cpan进行安装是没有问题的 - 如果您没有将相关模块上传到CPAN,则应调查local::lib

    请注意,GNOME libxml2不是通过CPAN分发的,必须通过其他方式获取。构建XML::LibXML模块还需要相应的头文件。

  • 您还可以使用PAR之类的打包工具。这将使用perl解释器,源文件和任何依赖项创建可执行存档。这些归档是 large ,因为它们包含整个perl。正如您现在指定的perl版本一样,唯一剩下的变量是主机操作系统。请注意,这不会重复使用主机上的任何perl安装,并且必须自行处理所有内容。

答案 1 :(得分:0)

  

但是我怎么处理编译代码?

安装在$ arch特定目录中的代码只能在同一版本中使用相同版本或更高版本的维护版本(例如,安装了5.14.1的特定于arch的模块将适用于5.14.2但不适用于5.14.0或5.16)。它们只能与具有相同配置的Perl一起使用。除非你在他们的机器上控制Perl,否则这不太可行。

  

他们必须与他们在机器上找到的任何东西一起生活

然而,您正在询问如何添加到他们的计算机上。它是哪一个?