Как настроить файл 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.