Установить модули в других версиях rakudo с помощью rakubrew

При обновлении версии rakudo с помощью rakubrew довольно легко изменить версии, но я хочу знать, можно ли импортировать модули raku из старой версии в новую версию. doign zef устанавливается автоматически:

обновить:

rakubrew build 2020.10

но потом:

❯ raku
Welcome to ????????????????????????™ v2020.10.
Implementing the ????????????????™ programming language v6.d.
Built on MoarVM version 2020.10.

You may want to `zef install Readline` or `zef install Linenoise` or use rlwrap for a line editor

To exit type 'exit' or '^D'

поэтому мне нужно установить все модули, которые я сейчас использую:

rakubrew build-zef zef установить Sparrow6 zef установить Linenoise

поэтому существует любой файл .zef или .rakubrew или что-то, что проверяет автоматическое поддержание этих модулей


person anquegi    schedule 29.10.2020    source источник


Ответы (2)


Вы можете получить список установленных модулей, используя zef list --installed. Обратите внимание, что вы, вероятно, захотите проигнорировать репозиторий share/perl6, поскольку включенный в него модуль CORE специфичен для каждой версии rakudo.

см. https://github.com/ugexe/zef#list-from

список [* @ из]

Список известных доступных дистрибутивов

$ zef - список установленных

=== ›Найдено через /home/nickl/.rakubrew/moar-master/install/share/perl6/site

CSV :: Parser: ver ‹0.1.2›: auth ‹github: tony-o›

Zef: auth ‹github: ugexe›

=== ›Найдено через /home/nickl/.rakubrew/moar-master/install/share/perl6

ЯДРО: ver ‹6.c›: auth ‹perl›

В качестве альтернативы вы можете использовать следующий однострочный список, чтобы получить список:

$ raku -e 'say $*REPO.repo-chain.grep(CompUnit::Repository::Installation).map(*.installed.Slip).grep(*.defined).map({ CompUnit::Repository::Distribution.new($_).Str }).join(" ")'

Text::Table::Simple:ver<0.0.7>:auth<github:ugexe>:api<> CSV::Parser:ver<0.1.2>:auth<github:tony-o>:api<> CORE:ver<6.d>:auth<perl>:api<>

# $*REPO.repo-chain.grep(CompUnit::Repository::Installation) # Get only repos for installed raku modules
# .map(*.installed.Slip)                                     # Get a list of installed modules for this repo, and Slip it into the outer singular results list
# .grep(*.defined)                                           # Some repos will have had no modules, so remove these undefined entries
# .map({ CompUnit::Repository::Distribution.new($_).Str })   # Use CompUnit::Repository::Distribution to get at the normalized identifier
# .join(" ")                                                 # Join the results together

После того, как вы выбрали способ создания списка того, что необходимо установить, вы можете просто передать этот список в zef (хотя ваша оболочка может потребовать, чтобы вы указали имена, переданные явно в командной строке)

person ugexe    schedule 29.10.2020

rakubrew устанавливает разные версии Raku в разные каталоги $HOME/.rakubrew/versions/moar-*

Таким образом, каждая версия Raku имеет свои собственные Installation репозитории (site, vendor, ...).

И потому, что zef по умолчанию устанавливает дистрибутивы в site репо. Таким образом, модули недоступны в нескольких версиях.

Однако, поскольку Raku использует репозиторий home Installation (#inst/home/user-name/.raku), и он существует в repo-chain, поэтому вы можете установить модули, которые должны быть доступны во всех версиях, в home репо (~/.raku). (модули будут предварительно скомпилированы в первый раз use в новой Raku версии).

Обратите внимание: я не тестировал это с zef, но я использую Pakku, который по умолчанию устанавливается в home репозиторий, а модули, которые я устанавливаю в home, доступны для всех rakubrew Raku версий на моем компьютере с Linux.

person hythm    schedule 02.11.2020
comment
Репо home следует избегать тем, кто использует несколько установок. Обратная совместимость формата репозитория не гарантируется, и исторически были версии rakudo, которые больше не работали после обновления существующего репозитория с помощью установки rakudo. - person ugexe; 03.11.2020
comment
Я не думаю, что формат репозитория меняется так часто, и в редких случаях, когда это происходит, можно установить модули для каждой установки Rakudo отдельно в site репозитории. но пока он не сломается, установить в home репо один раз проще, чем устанавливать модули для каждой новой установки Rakudo. - person hythm; 03.11.2020
comment
Если ты хочешь это сделать, хорошо. Но не поощряйте других делать то, что может сломаться в будущем (тем более, что я предполагаю, что вы просто изучаете то, что я указал, и поэтому не уделили много времени рассмотрению последствий). - person ugexe; 03.11.2020
comment
Да, я делал это (используя home репо) долгое время без каких-либо проблем. И нет, я никого не призываю делать что-то, что нарушит их установку. когда выпускается новая версия Rakudo, и эта новая версия изменяет формат репо, это будет упомянуто в примечаниях к выпуску Rakudo, поэтому перед установкой этой новой версии я могу решить любую проблему, которая может возникнуть. - person hythm; 03.11.2020
comment
Меня не волновало, как долго вы лично используете home, но понимаете ли вы последствия его использования. Например, как вы можете исправить проблему, которая напрямую связана с деталями реализации rakudo между версиями? Важно отметить, что то, что вам кажется, что-то работает, не означает, что вы должны это делать. Домашнее репо для случая, когда установлен raku root, где, например, site не доступен для записи пользователем; это не предназначено для работы с несколькими установками raku и предлагать другим, что это без упоминания огромного предостережения, связанного с LTA. - person ugexe; 03.11.2020