【问题标题】:How to extend binary perl distribution如何扩展二进制 perl 发行版
【发布时间】:2013-10-25 23:12:00
【问题描述】:

我运行了一个名为“Senora”的开源项目,该项目是用 perl 编写的,用于处理 oracle 数据库。直到最近,它与 oracle 附带的 perl 发行版一起开箱即用。

但最近我尝试添加更多功能并且我需要 LibXML。就我个人而言,我在工作中运行 Strawberry perl,添加 LibXML 没有问题。然而,我的用户没有他们的个人 perl,他们必须使用他们在机器上找到的任何东西(oracle perl 总是在那里)。

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

但是我该如何处理已编译的代码?我很想从我的草莓树中复制 dll,但这感觉很骇人听闻。毕竟这些代码不是针对 oracle perl 编译的。

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

那么我还有什么其他选项可以将“缺少的东西”添加到我的 Senora 发行版中,以便它与 oracle perl 一起运行?

【问题讨论】:

  • 如果有帮助的话,草莓便携不需要安装也不需要特殊的系统权限,它可以安装DBD::Oracle,便携性是简单的压缩/解压缩文件
  • 我只是不想告诉我的用户,为了运行 Senora,他们还需要安装另一个 perl。
  • 您可以将所有内容捆绑在一起并提供 zip 文件。 :) 最后,如果 java 程序可以抱怨 JRE,为什么 perl 程序不能这样做?
  • 这就是我为 Windows 系统提供我的宠物项目所做的工作:使用 InnoSetup 创建一个安装程序,其中包含一个剥离+扩展的便携式 Strawberry Perl 和我的应用程序。用户正在获得一个熟悉的安装程序,它甚至不是那么大(~10MB)。

标签: oracle perl deployment cpan


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 我确实有一个 C 工具链 - 这就是 Strawberry perl 的全部意义所在。扩展 Strawberry perl 没有问题。操作系统也不是问题 - 它始终是 64 位 Windows。我的问题是我的用户将拥有 Oracle perl,我不知道如何扩展它,而且我也不想在他们身上强制使用 Strawberry perl。
【解决方案2】:

但是我该如何处理已编译的代码?

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

他们必须忍受他们在机器上找到的任何东西

但你问如何添加到他们的机器。是哪一个?

【讨论】:

    猜你喜欢
    • 2013-03-20
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多