Как настроить файл Dockerfile для использования cpanm для установки определенной версии модуля Perl?

в моем Dockerfile я настраиваю модули Perl, которые будут установлены при запуске, например:

RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]

однако, для одного модуля, мне нужна конкретная версия модуля, не последний. Как я могу указать эту версию в приведенной выше строке?

Я искал в интернете в течение нескольких часов, и пока не нашел ничего полезного.

3 ответов


вместо указания имени модуля укажите URL-адрес. Например, вместо Class::Data::Inheritable используйте https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.06.tar.gz

вы можете найти применимый URL, перейдя в страница модуля на metacpan, выбрав нужную версию и скопировав ссылку для скачивания.

PS: вы можете также установить PERL_CPANM_OPT=--from https://cpan.metacpan.org/ в среду cpanm только загрузки с помощью HTTPS.


чтобы CPAN установил определенную версию модуля,вам нужно предоставить полное имя файла дистрибутива модуля, включая автора. Например, установить модуль Set::Object версия 1.28, введите в командной строке:

cpan SAMV/Set-Object-1.28.tar.gz

то же самое относится к Docker, просто добавьте

RUN cpan SAMV/Set-Object-1.28.tar.gz

для тех, кто ищет этот же ответ в будущем, другой вариант можно найти здесь в документация cpanm:

cpanm Plack@0.9990

если у вас есть длинный список модулей, считают кормление cpanfile на cpanm вместо того, чтобы перечислять их все в Dockerfile.

самый простой способ указать конкретный номер версии для модуля в cpanfile как это:

requires 'Text::ParseWords', '==3.1';

синтаксис запроса последней версии модуля таков:

requires 'Text::ParseWords';

запрос минимальной версии: (обратите внимание на отсутствие'==')

requires 'Text::ParseWords', '3.1';

синтаксис для запроса определенных версий другими способами довольно хорошо документирован здесь.

еще одна большая запись использования cpanm и cpanfile можно найти в установка модулей cpan cpanm и cpanfile.