【问题标题】:How can I use a new Perl module without install permissions?如何在没有安装权限的情况下使用新的 Perl 模块?
【发布时间】:2010-09-20 02:01:43
【问题描述】:

这是我的情况:我对 Perl 几乎一无所知,但它是移植机器上唯一可用的语言。我只有在我的本地工作区而不是 Perl 安装位置的权限。我需要使用 CPAN 中的 Parallel::ForkManager Perl 模块

如何在不进行集中安装的情况下使用此 Parallel::ForkManager?是否有我可以设置的环境变量以便找到它?

谢谢

京东

【问题讨论】:

标签: perl permissions installation module cpan


【解决方案1】:

来自perlfaq8: How do I keep my own module/library directory?

当你构建模块时,告诉 Perl 将模块安装在哪里。

对于基于 C 的发行版,使用 INSTALL_BASE 选项 生成 Makefile 时:

perl Makefile.PL INSTALL_BASE=/mydir/perl

您可以在 CPAN.pm 配置中进行设置,以便自动安装模块 当您使用 CPAN.pm shell 时,在您的私有库目录中:

% cpan
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
cpan> o conf commit

对于基于 C 的发行版,使用 --install_base 选项:

perl Build.PL --install_base /mydir/perl

您也可以将 CPAN.pm 配置为自动使用此选项:

% cpan
cpan> o conf mbuild_arg --install_base /mydir/perl
cpan> o conf commit

INSTALL_BASE 告诉这些工具将您的模块放入 F. 有关如何运行新的详细信息,请参阅 L 已安装的模块。

不过,INSTALL_BASE 有一个警告,因为它的作用是 不同于旧版本的 PREFIX 和 LIB 设置 ExtUtils::MakeMaker 提倡。 INSTALL_BASE 不支持 为多个版本的 Perl 或不同版本安装模块 同一目录下的架构。你应该考虑如果你 真的想要那个,如果你这样做,使用旧的 PREFIX 和 LIB 设置。有关详细信息,请参阅 ExtUtils::Makemaker 文档。

【讨论】:

    【解决方案2】:

    从 CPAN 下载包到文件夹:

    wget http://search.cpan.org/CPAN/authors/id/S/SZ/SZABGAB/Parallel-ForkManager-1.06.tar.gz
    gunzip Parallel-ForkManager-1.06.tar.gz
    tar -xvf Parallel-ForkManager-1.06.tar
    

    在此之前在 home 中创建一个文件夹来存储您的本地模块,现在进入下载的文件夹并运行以下命令:

    perl Makefile.PL PREFIX=/home/username/myModules
    make
    make test
    make install
    

    从安装的文件夹中获取 ForkManager 的路径,/home/username/myModules 并找到 Parallel 文件夹并获取此文件夹的完整路径。

    现在在你的 perl 文件中把这些放在开头

    use lib '/home/username/myModules/bin.../Parallel';
    use parallel::ForkManager;
    

    --应该可以的。

    【讨论】:

      【解决方案3】:

      查看 Mark Dominus 的 this post

      摘录:

      • 在构建 Makefile 时设置 PREFIX=X
      • 在构建 Makefile 时设置 INSTALLDIRS=vendor 和 VENDORPREFIX=X
        • 或者您可能需要设置 INSTALLVENDORLIB 或其他东西来代替 VENDORPREFIX
        • 或者也许不是在构建 Makefile 时设置它们,而是在运行 make install 目标时设置它们
      • 在构建 Makefile 时设置 LIB=X/lib
      • 使用 PAR
      • 使用本地::lib

      Mark 在他的博客中还提供了另一个解决方案,它需要更多的空间来描述,但归结为运行 make 和 make test 而不是 make install 然后使用 blib/ 中的东西。

      【讨论】:

      • 没有理由乱搞供应商的东西。您应该保留 INSTALLDIRS 原样,“站点”对于本地安装的模块是正确的。并使用 INSTALL_BASE,而不是 PREFIX/LIB。
      【解决方案4】:

      在使用模块时,有 PERL5LIB 环境变量和命令行上的-I。有告诉 CPAN 和 CPANPLUS 的机制。

      CPAN手册的问题5中有信息(perldoc CPAN,或查看CPAN本身)。

      【讨论】:

        【解决方案5】:
        use lib 'directory';
        use Parallel::ForkManager;
        

        【讨论】:

          【解决方案6】:

          您可以使用-I(大写i)命令行开关,后跟放置模块的目录;或尝试使用“use lib”指令,后跟目录。

          【讨论】:

            【解决方案7】:

            【讨论】:

              【解决方案8】:
              perl Makefile.PL LIB=/my/perl_modules/lib/
              make
              make install
              PERL5LIB=$PERL5LIB:/my/perl_modules/lib/
              perl myperlcode.pl
              

              【讨论】:

                【解决方案9】:

                使用cpanm -l $DIR_NAME 选项。

                【讨论】:

                  【解决方案10】:

                  perlbrew 允许您使用本地 perl 并将其包安装到本地目录。

                  \curl -L https://install.perlbrew.pl | bash
                  
                  perlbrew init  # put this in .bash_profile etc
                  
                  perlbrew install 5.27.11
                  
                  perlbrew switch 5.27.11
                  

                  另见https://opensource.com/article/18/7/perlbrew

                  【讨论】:

                    【解决方案11】:

                    考虑使用 cpanminus,this other thread 上的建议

                    【讨论】:

                      猜你喜欢
                      • 2011-04-13
                      • 1970-01-01
                      • 2011-12-26
                      • 2011-11-19
                      • 1970-01-01
                      • 2019-12-21
                      • 2013-11-29
                      • 2021-12-14
                      • 1970-01-01
                      相关资源
                      最近更新 更多