2010-04-21 32 views
5

对于Perl而言,Perl对于动态语言来说是非常新颖的东西,对于如何不直接管理模块,我感到有些惊讶。为什么我不能简单地将已安装的Perl模块复制到其他机器上?

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

  • 在工作中(Windows 7)中我使用cpan,因为我们的防火墙,让FTP无法使用
  • 在家里键(Mac OS X)它的工作
  • 在外部环境(Linux的CentOS的)问题,它因为我没有root访问权限,因此我必须配置cpan以非root用户身份运行
  • 我试过在另一台有权访问的服务器上。如果以前的外部环境是一个VPS,所以我有一个外壳访问,这另一个是廉价的共享主机,我没有办法安装除预装的新模块

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

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

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

+3

当模块用Perl编写时,你可以*只复制它们。是的,你也可以“cpan”。尽管这会让你自己解决依赖关系。 – hobbs 2010-04-21 13:10:50

+0

VPS通常意味着root访问,而不仅仅是shell访问。 – MkV 2010-04-21 13:18:24

+1

你在Windows上使用什么?草莓的Perl,ActiveState,别的?我相信ppm有模板工具包。 如果您在安装Template Toolkit时遇到问题,您可以随时尝试使用Template :: Tiny,而这仅取决于Capture :: Tiny,而这仅取决于核心Perl模块 – MkV 2010-04-21 13:26:38

回答

4

在外部环境(Linux的CentOS的)就是几个小时,因为我没有root访问权限的工作后,我不得不配置CPAN作为非root用户运行

这是一个那些时候它有助于了解The Trick。在这种情况下,local::lib可让您在大约三分钟内配置非root安装区域和所有ENV变量。

如果perl的模块是用Perl编写的,为什么copy/past方法不起作用?

有些是用Pure Perl编写的,但很多都是用C语言编写的(使用Perl的XS API)来提高效率。

有时候你最终像JSON::XSJSON::PPJSON::Any情况来自动选择安装的最好的一个。

是不是有办法下载模块(tar,zip ...)并使用cpan来部署它?

该cpan程序是关于从互联网上获取的东西。您可以下载包(会有线沿线的一个链接:在CPAN页面的右侧“下载CGI.pm-3.49.tar.gz”),解压缩,然后

perl Makefile.PL 
make 
make install 

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

+0

cpan命令不仅仅是获取发行版。 :) – 2010-04-21 22:20:32

10

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

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

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

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

+1

“Win32 :: OLE不应该在Unix上工作。” - 我在那里嗅到一个潜在的XKCD动画片> =) – DVK 2010-04-21 14:01:05

相关问题