Carmel - CPAN Artifact Repository Manager
# Run with a directory with cpanfile
carmel install
# Manually pull a module if you don't have it
carmel inject [email protected] [email protected]
# list all the modules to be loaded
carmel list
# list all the modules in a tree
carmel tree
# show a location where a module is installed
carmel show Plack
# update snapshot
carmel update
# Runs your perl script with modules from artifacts
carmel exec perl ...
# Requires all your modules in cpanfile in one shot
carmel exec perl -e 'use Carmel::Preload;'
# Roll out the currently selected modules into ./local
carmel rollout
# package modules tarballs and index into ./vendor/cache
carmel package
# use Carmel packages inside a script (without carmel exec)
perl -e 'use Carmel::Setup; ...'
# prints export PATH=... etc for shell scripting
carmel export
# find a module in a repository
carmel find DBI
# find a module matching the version query
carmel find Plack ">= 1.0000, < 1.1000"
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/.carmel/{version}-{archname}/builds
,
and your directory structure would look like:
$HOME/.carmel/5.20.1-darwin-2level/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
, Carmel
lists all the build directories and .pm
files you need, and then
prepend the mappings of these files in the @INC
hook.
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 let perl load URI.pm
from that
directory.
Instead, if you have:
requires 'URI';
it will find the latest that satisfies the (empty) requirement, which
is in URI-1.64/blib/lib
.
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.
As of v0.1.29, Carmel supports saving and loading snapshot file in
cpanfile.snapshot
, in a compatible format with Carton. Versions
saved in the snapshot file will be preserved across multiple runs of
Carmel across machines, so that versions frozen in one environment can
be committed to a source code repository, and can be reproduce in
another box, so long as the perl version and architecture is the same.
-
https://github.com/miyagawa/Carmel
Code repository, Wiki and Issue Tracker
-
irc://irc.perl.org/#cpanm
IRC chat room
Tatsuhiko Miyagawa [email protected]
Copyright 2015- Tatsuhiko Miyagawa
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.