为什么 CPAN 不为我的捆绑包中的模块安装依赖项?

发布于 2024-08-28 08:05:26 字数 865 浏览 9 评论 0原文

我正在创建一个捆绑包,以便轻松安装我的应用程序。 我从这里开始: http://search.cpan.org/dist/ CPAN/lib/CPAN.pm#Bundles

我有一个包 Bundle::MyApp ,如下所示:

package Bundle::MyApp;

$VERSION = '0.01';

1;

__END__

=head1 NAME

Bundle::MyApp - modules needed by my app

=head1 SYNOPSIS

cpan install Bundle::MyApp

=head1 CONTENTS

DateTime
Image::Size

我正在本地计算机上测试它,因此我将包放入我的 cpan 文件夹中,例如: ~/ .cpan/Bundle/MyApp.pm

现在我可以使用 cpan install Bundle::MyApp 运行它并且它可以工作,只是它不安装我列出的模块所需的依赖项。因此,在本示例中,cpan 首先尝试安装 DateTime,但安装失败,因为首先需要 DateTime::Locale,然后尝试安装 Image::Size,但也失败,因为需要依赖项。

如果我使用 cpan install DateTime 直接通过 cpan 安装 DateTime 模块,它可以正常工作并安装依赖项。

因此,我正在寻找一种方法来告诉 CPAN 从我的捆绑包安装时遵循依赖关系。我的包裹里需要放什么东西吗?或者可能是我的用户帐户的 CPAN 配置有问题?

I'm creating a bundle to make it easy to install my app.
I started here: http://search.cpan.org/dist/CPAN/lib/CPAN.pm#Bundles

I have a package Bundle::MyApp which looks like this:

package Bundle::MyApp;

$VERSION = '0.01';

1;

__END__

=head1 NAME

Bundle::MyApp - modules needed by my app

=head1 SYNOPSIS

cpan install Bundle::MyApp

=head1 CONTENTS

DateTime
Image::Size

I'm testing it on my local machine, so I put the package into my cpan folder, eg: ~/.cpan/Bundle/MyApp.pm

Now I can run it using cpan install Bundle::MyApp and it works, except that it doesn't install the dependencies required by the modules I have listed. So in this example, cpan first tries to install DateTime but the install fails because DateTime::Locale is needed first, then it tries to install Image::Size and that fails too beacuse there are deps needed.

If I install the DateTime module directly via cpan using cpan install DateTime it works fine and dependencies are installed.

So I'm looking for a way to tell CPAN to follow dependencies when its installing from my bundle. Is there something I need to put in my package? or maybe it's an issue with the CPAN config for my user account?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一张白纸 2024-09-04 08:05:26

模块依赖项

在 Makefile.PL 中,您可以列出必备模块。来自 perldoc ExtUtils::MakeMaker

   PREREQ_PM
     A hash of modules that are needed to run your module.  The keys are
     the module names ie. Test::More, and the minimum version is the
     value. If the required version number is 0 any version will do.

     This will go into the "requires" field of your META.yml.

         PREREQ_PM => {
             # Require Test::More at least 0.47
             "Test::More" => "0.47",

             # Require any version of Acme::Buffy
             "Acme::Buffy" => 0,
         }

还有 PREREQ_PRINT 和 PREREQ_FATAL。

捆绑文件格式

CONTENTS 部分中捆绑行的格式需要用空行分隔依赖项。

# @(#)$Id: Informix.pm,v 95.1 1999/11/18 22:10:59 jleffler Exp $

package Bundle::DBD::Informix;

$VERSION = '0.95';

1;

__END__

=head1 NAME

Bundle::DBD::Informix - A bundle to install all DBD::Informix related modules

=head1 SYNOPSIS

C<perl -MCPAN -e 'install Bundle::DBD::Informix'>

=head1 CONTENTS

Digest::MD5  - Perl interface to the MD5 Algorithm by GAAS (Gisle Aas)

Bundle::DBI  - Bundle for DBI by TIMB (Tim Bunce)

DBD::Informix  - DBD::Informix by JOHNL (Jonathan Leffler)

=head1 DESCRIPTION

This bundle includes all the modules used by the Perl Database
Interface (DBI) driver for Informix (DBD::Informix), assuming the
use of DBI version 1.02, created by Tim Bunce.

If you've not previously used the CPAN module to install any
bundles, you will be interrogated during its setup phase.
But when you've done it once, it remembers what you told it.
You could start by running:

    C<perl -MCPAN -e 'install Bundle::CPAN'>

Note that DBD::Informix does not directly use Digest::MD5.  However, if
Informix R&D or Tech Support takes over DBD::Informix (which, as of
1999-11-17, they have not agreed to do), then you will be required to
demonstrate that the MD5 checksums of the code you've got match the
original, or you'll be required to provide the diffs between the original
and what you are using.  The shell script md5.verify and Perl script
md5.check will be used to do this.

=head1 SEE ALSO

Bundle::DBI

=head1 AUTHOR

Jonathan Leffler E<lt>F<[email protected]>E<gt>

=head1 THANKS

This bundle was created by ripping off Bundle::libnet created by 
Graham Barr E<lt>F<[email protected]>E<gt>, and radically simplified
with some information from Jochen Wiedmann E<lt>F<[email protected]>E<gt>.

=cut

Module dependencies

In Makefile.PL, you can list pre-requisite modules. From perldoc ExtUtils::MakeMaker:

   PREREQ_PM
     A hash of modules that are needed to run your module.  The keys are
     the module names ie. Test::More, and the minimum version is the
     value. If the required version number is 0 any version will do.

     This will go into the "requires" field of your META.yml.

         PREREQ_PM => {
             # Require Test::More at least 0.47
             "Test::More" => "0.47",

             # Require any version of Acme::Buffy
             "Acme::Buffy" => 0,
         }

There is also a PREREQ_PRINT and PREREQ_FATAL.

Bundle file format

The format for the bundle lines in the CONTENTS section requires blank lines separating the dependencies.

# @(#)$Id: Informix.pm,v 95.1 1999/11/18 22:10:59 jleffler Exp $

package Bundle::DBD::Informix;

$VERSION = '0.95';

1;

__END__

=head1 NAME

Bundle::DBD::Informix - A bundle to install all DBD::Informix related modules

=head1 SYNOPSIS

C<perl -MCPAN -e 'install Bundle::DBD::Informix'>

=head1 CONTENTS

Digest::MD5  - Perl interface to the MD5 Algorithm by GAAS (Gisle Aas)

Bundle::DBI  - Bundle for DBI by TIMB (Tim Bunce)

DBD::Informix  - DBD::Informix by JOHNL (Jonathan Leffler)

=head1 DESCRIPTION

This bundle includes all the modules used by the Perl Database
Interface (DBI) driver for Informix (DBD::Informix), assuming the
use of DBI version 1.02, created by Tim Bunce.

If you've not previously used the CPAN module to install any
bundles, you will be interrogated during its setup phase.
But when you've done it once, it remembers what you told it.
You could start by running:

    C<perl -MCPAN -e 'install Bundle::CPAN'>

Note that DBD::Informix does not directly use Digest::MD5.  However, if
Informix R&D or Tech Support takes over DBD::Informix (which, as of
1999-11-17, they have not agreed to do), then you will be required to
demonstrate that the MD5 checksums of the code you've got match the
original, or you'll be required to provide the diffs between the original
and what you are using.  The shell script md5.verify and Perl script
md5.check will be used to do this.

=head1 SEE ALSO

Bundle::DBI

=head1 AUTHOR

Jonathan Leffler E<lt>F<[email protected]>E<gt>

=head1 THANKS

This bundle was created by ripping off Bundle::libnet created by 
Graham Barr E<lt>F<[email protected]>E<gt>, and radically simplified
with some information from Jochen Wiedmann E<lt>F<[email protected]>E<gt>.

=cut
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文