【问题标题】:How to use a module from the local library without installing it?如何使用本地库中的模块而不安装它?
【发布时间】:2018-01-16 07:54:42
【问题描述】:

我有一个 XS 模块。使用./Build 构建后,Module.so 将被放入blib/arch/auto/XS 目录中。

在我的Module.pm 我有:

require XSLoader;
XSLoader::load( 'Module', $VERSION );

我运行程序为:

$ perl -Iblib/lib -MModule -e 'my $x; $x=1'

$ perl -Iblib -MModule -e 'my $x; $x=1'

在这两种情况下,都会使用之前安装到系统中的模块。

我应该使用哪个选项从blib/arch/auto 运行带有Module.so 的代码?

UPD
我尝试使用来自blib 的模块,因为在使用XS 进行开发和实验期间我不需要安装它

【问题讨论】:

  • 为什么要这样做?您是否运行了模块测试?如果您正在使用系统 perl 但无法在系统库位置安装模块,那么您应该将它们安装在您的 users 目录下并添加到 @INC
  • @Borodin:我学习XS。我创建样板,对.xs 进行更改,构建、运行代码并看看会发生什么:./Build && perl -Iblib/lib -Iblib/arch -MModule -e 'Module::Test()'(之前我进行了更改、构建、安装、运行代码)

标签: perl xs


【解决方案1】:

我窥探xstut

perl -MExtUtils::Command::MM -e "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t

然后here:

 test_harness($verbose, @test_libs);

通过通过 $verbose 标志的 Test::Harness 在 @ARGV 上运行测试。任何@test_libs 都不会转移到测试的@INC 上。

所以我应该将两条路径都包含到@INC

$ perl -Iblib/lib -Iblib/arch -MModule -e 'my $x; $x=1'

UPD
正如@Borodin 所说,更好的解决方案是使用blib 模块:

$ perl -Mblib -MModule -e 'my $x; $x=1'

【讨论】:

  • 这是一个可怕的黑客攻击。为什么你的当前工作目录中有一个blib 目录?您不得使用blib 中的文件。它们是由MakeMaker 在模块构建的中间阶段创建的临时文件。它们随时可能被删除。如果您想将此作为临时措施,请在命令行上使用带有-Mblibblib 模块,但它不是永久解决方案。跨度>
  • 请用@Borodin标记您的cmets,以便在有消息等待我时通知我。
  • 这并不是一个解决方案。 不要使用来自blib的软件它很可能有一天会消失,因为它只是部分构建残余。
  • @Borodin:请参阅关于我为什么需要这个问题的评论。
猜你喜欢
  • 2012-02-22
  • 2019-11-28
  • 2019-08-25
  • 2014-06-29
  • 2021-01-09
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多