【问题标题】:Why can't I simply copy installed Perl modules to other machines?为什么我不能简单地将已安装的 Perl 模块复制到其他机器上?
【发布时间】:2011-02-10 13:48:29
【问题描述】:

对 Perl 很陌生,但对动态语言不熟悉,我对模块管理的不直接性感到有些惊讶。

当然,cpan X 理论上可行,但我正在使用三台不同的机器和操作系统(在工作中、在家中、在外部环境中测试)处理同一个项目。

  • 在工作中 (Windows 7) 我在使用 cpan 时遇到问题,因为我们的防火墙导致 ftp 无法使用
  • 在家里 (Mac OS X) 可以正常工作
  • 在外部环境 (Linux CentOs) 中,它在下班后工作,因为我没有 root 访问权限,我必须配置 cpan 以作为非 root 用户运行
  • 我已经尝试在我可以访问的另一台服务器上。如果以前的外部环境是 VPS,所以我有 shell 访问权限,那么另一个是廉价的共享主机,除了预安装的模块之外,我无法安装新模块

目前我仍然无法在 Windows 下安装Template。我已经看到作为替代方案我可以编译它,我也尝试过 ActiveState 的 PPM,但该模块不存在。

现在,我的困惑在于 Perl 是一种动态语言。我在工作时遇到了所有这些问题,例如,在使用 C 时,我必须为所有平台编译所有库,但我认为使用 Perl 的方法与 90 年代的 Python 或 PHP 非常相似% 的情况下复制目录中的模块并导入它很简单。

所以,我的问题是:如果 Perl 的模块是用 Perl 编写的,为什么复制/粘贴方法不起作用?如果必须编译某些(或某些部分)模块,如何在 CPAN 中查看模块是仅 Perl 还是依赖于已编译的库?没有办法下载模块(tar,zip ...)并使用cpan来部署它吗?这将解决我在 Windows 下的问题。

【问题讨论】:

  • 用 Perl 编写模块时,您可以复制它们。是的,你也可以“cpan”。虽然这让你自己解决依赖关系。
  • VPS 通常意味着 root 访问,而不仅仅是 shell 访问。
  • 您在 Windows 上使用什么? Strawberry Perl,ActiveState,还有什么?我相信 ppm 有模板工具包。如果您在安装 Template Toolkit 时遇到问题,您可以随时尝试 Template::Tiny,它只依赖于 Capture::Tiny,而后者又只依赖于核心 Perl 模块
  • 我在工作中也遇到了 ftp 问题。但是在禁用 ftp (o conf ftp '')、设置 http_proxy 设置并指向使用 http 的 CPAN 镜像站点后,cpan 工作正常。没那么难。
  • 有什么原因你不能仅仅出于兴趣而使用 PHP,它在跨服务器甚至跨操作系统方面往往不那么脆弱。

标签: perl module cpan


【解决方案1】:

现在,Perl 是一种动态语言,但这并不意味着人们编写的所有内容都可以跨平台移植。这不是语言的错。这甚至不是程序员的错。有些东西,比如Win32::OLE 不应该在 Unix 上工作。 :)

其他动态语言也会有一些相同的问题。如果您必须编译 C 代码,您将无法仅将文件复制到另一台机器。某些发行版根据您的操作系统等配置代码略有不同。

即使您可以复制文件,您也必须确保复制所有需要的文件。您知道特定模块所需的一切吗?请记住,它们中的许多都有依赖关系。

您遇到的大多数问题都与语言无关。您在使用这些工具时遇到了问题。如果您想要一个为您做出所有决定的零配置 CPAN 工具,请尝试cpanminus。这与您从cpan 中得到的结果基本相同(尽管代码不同),但它会为您做出所有决定。它不运行任何分发测试,而是安装到您的用户目录中。当您需要一些可以让您控制的东西时,请返回cpan

【讨论】:

  • "Win32::OLE 不应该在 Unix 上工作。" - 我在某处闻到了一个潜在的 XKCD 卡通 >=)
【解决方案2】:

在外部环境(Linux CentOs)中,它在下班后工作,因为我没有 root 访问权限,我必须将 cpan 配置为以非 root 用户身份运行

这是了解诀窍的时候之一。在本例中为local::lib,可让您在大约三分钟内配置非 root 安装区域和所有 ENV 变量。

如果 perl 的模块是用 perl 编写的,为什么复制/过去的方法不起作用?

有些是用纯 Perl 编写的,但许多部分是用 C 编写的(使用 Perl 的 XS API)以提高效率。

有时您会遇到JSON::XSJSON::PPJSON::Any 等情况来自动选择已安装的最佳版本。

有没有办法下载模块(tar、zip...)并使用cpan进行部署?

cpan 程序旨在从 Internet 获取内容。你可以下载这个包(在CPAN页面的右边会有一个“下载:CGI.pm-3.49.tar.gz”的链接),解压,然后

perl Makefile.PL
make
make install

您最好将您的 cpan 安装配置为仅使用 HTTP 源(在 urllist 配置选项中)。可能会在您的网络中到达create a mini CPAN mirror

【讨论】:

    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2014-09-01
    • 2012-07-05
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多