Почему CPAN не устанавливает зависимости для модулей в моем комплекте? - PullRequest
2 голосов
/ 13 апреля 2010

Я создаю пакет, чтобы облегчить установку моего приложения. Я начал здесь: 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, и он слишком неудачен, потому что нужны deps.

Если я устанавливаю модуль DateTime напрямую через cpan, используя cpan install DateTime, он работает нормально и устанавливаются зависимости.

Так что я ищу способ сказать CPAN следовать зависимостям при его установке из моего пакета. Что-то, что мне нужно положить в мою посылку? или, может быть, это проблема с конфигурацией CPAN для моей учетной записи пользователя?

1 Ответ

1 голос
/ 13 апреля 2010

Зависимости модуля

В 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.

Формат файла пакета

Формат строк комплекта в разделе СОДЕРЖАНИЕ требует пустых строк, разделяющих зависимости.

# @(#)$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<jleffler@informix.com>E<gt>

=head1 THANKS

This bundle was created by ripping off Bundle::libnet created by 
Graham Barr E<lt>F<gbarr@ti.com>E<gt>, and radically simplified
with some information from Jochen Wiedmann E<lt>F<joe@ispsoft.de>E<gt>.

=cut
...