Carmel - CPAN Artifact Repository Manager
# Run with a directory with cpanfile or cpanfile.snapshot carmel install # Manually pull a module if you don't have it carmel install DBI@1.633 Plack@1.0000 # Runs your perl script with modules from artifacts carmel exec perl ... # Runs your perl script with a checker to guarantee everything is loaded from Carmel carmel exec perl -MDevel::Carmel script.pl # prints export PERL5LIB=... etc for shell scripting carmel export # find a module in repository carmel find DBI # find a module matching the version query carmel find Plack ">= 1.0000, < 1.1000" # list all the modules to be loaded carmel list
THIS IS EXPERIMENTAL!
Carmel is yet another CPAN module manager.
Unlike traditional CPAN module installer, Carmel keeps the build of your dependencies in a central repository, then select the library paths to include upon runtime.
Carmel will keep the build directory (artifacts) after a cpanm installation in a repository, which defaults to $HOME/.perl-carmel/builds, and your directory structure would look like:
$HOME/.perl-carmel/builds
$HOME/.perl-carmel/builds Plack-1.0033/ blib/ arch/ lib/ URI-1.64/ blib/ arch/ lib/ URI-1.63/ blib/ arch/ lib/
Carmel scans this directory and creates the mapping of which version of any package belongs to which build directory.
Given the list of modules and requirements (using cpanfile or even better cpanfile.snapshot from Carton), Carmel lists all the build directories you need, and then prepend the blib directories to PERL5LIB environment variables.
cpanfile
cpanfile.snapshot
blib
PERL5LIB
For example, if you have:
requires 'URI', '== 1.63';
Carmel finds URI package with $VERSION set to 1.63 in URI-1.63/blib/lib so it will set that directory. Instead, if you have:
$VERSION
URI-1.63/blib/lib
requires 'URI';
it will find the latest that satisfies the (empty) requirement, which is in URI-1.64/blib/lib.
URI-1.64/blib/lib
The fact that it prefers the latest, rather than the oldest, might change in the future once a mechanism to make snapshot is instroduced, since you will not like to upgrade one of the dependencies unexpectedly.
You have a choice to execute a subprocess from Carmel, by using the exec sub command. If you prefer a fine grained control, you can also use env or export command to integrate with your own shell script wrapper.
exec
env
export
Tatsuhiko Miyagawa <miyagawa@bulknews.net>
Copyright 2015- Tatsuhiko Miyagawa
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
App::cpanminus Carton
https://github.com/ingydotnet/only-pm
https://github.com/gugod/perlrocks
To install Carmel, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Carmel
CPAN shell
perl -MCPAN -e shell install Carmel
For more information on module installation, please visit the detailed CPAN module installation guide.