Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有CPAN网络访问的机器上安装具有大量依赖项的Perl模块_Perl_Cpan - Fatal编程技术网

在没有CPAN网络访问的机器上安装具有大量依赖项的Perl模块

在没有CPAN网络访问的机器上安装具有大量依赖项的Perl模块,perl,cpan,Perl,Cpan,我正在尝试在Linux服务器上安装DateTime机器。不幸的是,这个Linux服务器有一些受限制的网络访问策略,阻止我直接使用CPANshell下载内容或安装cpanminus。更改访问策略超出了我的控制范围,因此我正在寻找解决方法。我也没有此Linux服务器的root访问权限 然而,我可以将任何东西下载到我工作的窗口机器,并上传到该服务器上的文件共享。所以我开始一个接一个地分析日期时间依赖关系。我会下载一个模块,有时会有Makefile.PL,有时会有Build.PL。然后,我将每个构建或生

我正在尝试在Linux服务器上安装DateTime机器。不幸的是,这个Linux服务器有一些受限制的网络访问策略,阻止我直接使用CPANshell下载内容或安装cpanminus。更改访问策略超出了我的控制范围,因此我正在寻找解决方法。我也没有此Linux服务器的root访问权限

然而,我可以将任何东西下载到我工作的窗口机器,并上传到该服务器上的文件共享。所以我开始一个接一个地分析日期时间依赖关系。我会下载一个模块,有时会有Makefile.PL,有时会有Build.PL。然后,我将每个构建或生成文件重新设置到安装库,测试每个模块。我这样做了大约20个模块,树似乎扩展到更小的类,看不到尽头


我希望你能告诉我一个更好的方法。有没有一种方法可以让我从一台具有CPAN访问权限(即我的Windows box)的机器上下载所有DateTime依赖项到一个巨大的Perl包中,然后将其上传到Linux服务器,并在那里运行CPAN(无需网络访问)以将它们放在正确的位置?谢谢。

到目前为止,最有效的方法是在linux机器上安装,并使用alias
localcpanm
类似以下内容:

alias localcpanm='cpanm --mirror file:///Users/Shared/cpan/ --mirror-only'

我已经在长途火车旅行中使用了这种技术,并获得了巨大的成功。

有一些解决方案可以解决这个问题,例如,它类似于ruby的bundler,或者是你自己的专用CPAN(据我所知)。

我在工作中使用的一种解决方案是使用perlbrew开发服务器,一个Perl+模块和每个应用程序一个应用程序,所有这些都在git repo中。
在生产机器上,部署应用程序和使用标记在版本之间切换只需访问git存储库。

第一步是自动下载所有依赖项。您可以使用
cpanm
在网络连接的计算机上执行此操作:


cpanm-L/dev/null--保存dists dists--scandeps DateTime

这将生成依赖项列表,但更重要的是将它们下载到
dists
目录中。
-L/dev/null
确保它不会关注已安装的模块

dists
原样复制到您的受限框中

然后,在受限框上使用
cpanm
执行本地安装:


反射镜file:///path/to/dists -L foo日期时间


其中
/path/to/dists
是指向
dists
目录的绝对路径。这将把东西安装到
foo
目录中。

您是否确保在这台锁定的机器上有一个生成环境?如果你花了很多时间来转移发行版,如果它没有处理它们的工具,那就太可惜了。谢谢。是否有一种方法可以利用minicpan创建一个仅包含CPAN子集的镜像,即到单个DateTime模块及其所有依赖项的镜像?以后,我们是否能够只向镜像中添加我们感兴趣的任何附加模块?我认为镜像整个CPAN是可以的,但是能够使用比整个CPAN更少的资源将是一个不错的选择。看起来CPAN::Mini::FromList可以做到这一点,但是cpanratings评论并不能激发信心。cpanm可以创建必要的“minicpan”,如我对这个问题的回答所示,谢谢,这正符合我的要求。