cpanm - get, unpack build and install modules from CPAN
cpanm Test::More # install Test::More cpanm MIYAGAWA/Plack-0.99_05.tar.gz # full distribution path cpanm http://example.org/LDS/CGI.pm-3.20.tar.gz # install from URL cpanm ~/dists/MyCompany-Enterprise-1.00.tar.gz # install from a local file cpanm --interactive Task::Kensho # Configure interactively cpanm . # install from local directory cpanm --installdeps . # install all the deps for the current directory cpanm -L extlib Plack # install Plack and all non-core deps into extlib cpanm --mirror http://cpan.cpantesters.org/ DBI # use the fast-syncing mirror
Command line arguments can be either a module name, distribution file, local file path, HTTP URL or git repository URL. Following commands will all work as you expect.
cpanm Plack cpanm Plack/Request.pm cpanm MIYAGAWA/Plack-1.0000.tar.gz cpanm /path/to/Plack-1.0000.tar.gz cpanm http://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/Plack-0.9990.tar.gz cpanm git://github.com/plack/Plack.git
Additionally, you can use the notation using
@to specify version for a given module.
~specifies the version requirement in the CPAN::Meta::Spec format, while
@pins the exact version, and is a shortcut for
cpanm Plack~1.0000 # 1.0000 or later cpanm Plack~">= 1.0000, < 2.0000" # latest of 1.xxxx cpanm Plack@0.9990 # specific version. same as Plack~"== 0.9990"
The version query including specific version or range will be sent to MetaCPAN to search for previous releases. The query will search for BackPAN archives by default, unless you specify
--devoption, in which case, archived versions will be filtered out.
For a git repository, you can specify a branch, tag, or commit SHA to build. The default is
cpanm git://github.com/plack/Plack.email@example.com # tag cpanm git://github.com/plack/Plack.git@devel # branch
- -i, --install
Upgrades itself. It's just an alias for:
Displays the distribution information in
AUTHOR/Dist-Name-ver.tar.gzformat in the standard out.
Installs the dependencies of the target distribution but won't build itself. Handy if you want to try the application from a version controlled repository such as git.
cpanm --installdeps .
Download and unpack the distribution and then open the directory with your shell. Handy to poke around the source code or do manual testing.
- -U, --uninstall
EXPERIMENTAL: Uninstalls the modules. Will remove the distribution files from your library path using the
When used with
-L, only the files under the local::lib directory will be removed.
NOTE: If you have the "dual-life" module in multiple locations (i.e.
perllibrary path, with perl 5.12 or later), only the files in
site_perlwill be deleted.
If the distribution has bin scripts and man, they will be kept in case the core installation still references that, although there's no guarantee that the script will continue working as expected with the older version of .pm files.
- -h, --help
Displays the help message.
- -V, --version
Displays the version number.
You can specify the default options in
PERL_CPANM_OPT environment variable.
- -f, --force
Force install modules even when testing failed.
- -n, --notest
Skip the testing of modules. Use this only when you just want to save time for installing hundreds of distributions to the same perl and architecture you've already tested to make sure it builds fine.
Defaults to false, and you can say
--no-notestto override when it is set in the default options in
Run the tests only, and do not install the specified module or distributions. Handy if you want to verify the new (or even old) releases pass its unit tests without installing the module.
Note that if you specify this option with a module or distribution that has dependencies, these dependencies will be installed if you don't currently have them.
- -S, --sudo
Switch to the root user with
sudowhen installing modules. Use this if you want to install modules to the system perl include path.
Defaults to false, and you can say
--no-sudoto override when it is set in the default options in
- -v, --verbose
Makes the output verbose. It also enables the interactive configuration. (See --interactive)
- -q, --quiet
Makes the output even more quiet than the default. It only shows the successful/failed dependencies to the output.
- -l, --local-lib
Sets the local::lib compatible path to install modules to. You don't need to set this if you already configure the shell environment variables using local::lib, but this can be used to override that as well.
- -L, --local-lib-contained
--local-libbut with --self-contained set. All non-core dependencies will be installed even if they're already installed.
cpanm -L extlib Plack
would install Plack and all of its non-core dependencies into the directory
extlib, which can be loaded from your application with:
use local::lib '/path/to/extlib';
When examining the dependencies, assume no non-core modules are installed on the system. Handy if you want to bundle application dependencies in one directory so you can distribute to other machines.
Specifies the base URL for the CPAN mirror to use, such as
http://cpan.cpantesters.org/(you can omit the trailing slash). You can specify multiple mirror URLs by repeating the command line option.
You can use a local directory that has a CPAN mirror structure (created by tools such as OrePAN or Pinto) by using a special URL scheme
file://. If the given URL begins with `/` (without any scheme), it is considered as a file scheme as well.
cpanm --mirror file:///path/to/mirror cpanm --mirror ~/minicpan # Because shell expands ~ to /home/user
Download the mirror's 02packages.details.txt.gz index file instead of querying the CPAN Meta DB. This will also effectively opt out sending your local perl versions to backend database servers such as CPAN Meta DB and MetaCPAN.
Select this option if you are using a local mirror of CPAN, such as minicpan when you're offline, or your own CPAN index (a.k.a darkpan).
Tip: It might be useful if you name these mirror options with your shell aliases, like:
alias minicpanm='cpanm --mirror ~/minicpan --mirror-only' alias darkpan='cpanm --mirror http://mycompany.example.com/DPAN --mirror-only'
EXPERIMENTAL: Specifies the file path to
02packages.details.txtfor module search index.
EXPERIMENTAL: Specifies an alternate URI for CPAN MetaDB index lookups.
EXPERIMENTAL: Specified an alternate path for cpanfile to search for, when
--installdepscommand is in use. Defaults to
Prompts when a test fails so that you can skip, force install, retry or look in the shell to see what's going wrong. It also prompts when one of the dependency failed if you want to proceed the installation.
Defaults to false, and you can say
--no-promptto override if it's set in the default options in
EXPERIMENTAL: search for a newer developer release as well. Defaults to false.
cpanm, when given a module name in the command line (i.e.
cpanm Plack), checks the locally installed version first and skips if it is already installed. This option makes it skip the check, so:
cpanm --reinstall Plack
would reinstall Plack even if your locally installed version is latest, or even newer (which would happen if you install a developer release from version control repositories).
Defaults to false.
Makes the configuration (such as
Build.PL) interactive, so you can answer questions in the distribution that requires custom configuration or Task:: distributions.
Defaults to false, and you can say
--no-interactiveto override when it's set in the default options in
- --pp, --pureperl
Prefer Pure perl build of modules by setting
PUREPERL_ONLY=1for MakeMaker and
--pureperl-onlyfor Build.PL based distributions. Note that not all of the CPAN modules support this convention yet.
- --with-recommends, --with-suggests
EXPERIMENTAL: Installs dependencies declared as
suggestsrespectively, per META spec. When these dependencies fail to install, cpanm continues the installation, since they're just recommendation/suggestion.
Enabling this could potentially make a circular dependency for a few modules on CPAN, when
recommendsadds a module that
recommendsback the module in return.
--without-suggeststo override the default decision made earlier in
Defaults to false for both.
EXPERIMENTAL: Installs develop phase dependencies in META files or
cpanfilewhen used with
--installdeps. Defaults to false.
- --with-feature, --without-feature, --with-all-features
EXPERIMENTAL: Specifies the feature to enable, if a module supports optional features per META spec 2.0.
cpanm --with-feature=opt_csv Spreadsheet::Read
the features can also be interactively chosen when
--interactiveoption is enabled.
--with-all-featuresenables all the optional features, and
--without-featurecan select a feature to disable.
- --configure-timeout, --build-timeout, --test-timeout
Specify the timeout length (in seconds) to wait for the configure, build and test process. Current default values are: 60 for configure, 3600 for build and 1800 for test.
- --configure-args, --build-args, --test-args, --install-args
EXPERIMENTAL: Pass arguments for configure/build/test/install commands respectively, for a given module to install.
cpanm DBD::mysql --configure-args="--cflags=... --libs=..."
The argument is only enabled for the module passed as a command line argument, not dependencies.
DEPRECATED: Scans the depencencies of given modules and output the tree in a text format. (See
--formatbelow for more options)
Because this command doesn't actually install any distributions, it will be useful that by typing:
cpanm --scandeps Catalyst::Runtime
you can make sure what modules will be installed.
This command takes into account which modules you already have installed in your system. If you want to see what modules will be installed against a vanilla perl installation, you might want to combine it with
DEPRECATED: Determines what format to display the scanned dependency tree. Available options are
Displays the tree in a plain text format. This is the default value.
- json, yaml
[ distribution, dependencies ]
and the container is an array containing the root elements. Note that there may be multiple root nodes, since you can give multiple modules to the
distsis a special output format, where it prints the distribution filename in the depth first order after the dependency resolution, like:
GAAS/MIME-Base64-3.13.tar.gz GAAS/URI-1.58.tar.gz PETDANCE/HTML-Tagset-3.20.tar.gz GAAS/HTML-Parser-3.68.tar.gz GAAS/libwww-perl-5.837.tar.gz
which means you can install these distributions in this order without extra dependencies. When combined with
-Loption, it will be useful to replay installations on other machines.
Specifies the optional directory path to copy downloaded tarballs in the CPAN mirror compatible directory structure i.e. authors/id/A/AU/AUTHORS/Foo-Bar-version.tar.gz
If the distro tarball did not come from CPAN, for example from a local file or from GitHub, then it will be saved under vendor/Foo-Bar-version.tar.gz.
Uninstalls the shadow files of the distribution that you're installing. This eliminates the confusion if you're trying to install core (dual-life) modules from CPAN against perl 5.10 or older, or modules that used to be XS-based but switched to pure perl at some version.
If you run cpanm as root and use
INSTALL_BASEor equivalent to specify custom installation path, you SHOULD disable this option so you won't accidentally uninstall dual-life modules from the core include path.
Defaults to true if your perl version is smaller than 5.12, and you can disable that with
NOTE: Since version 1.3000 this flag is turned off by default for perl newer than 5.12, since with 5.12 @INC contains site_perl directory before the perl core library path, and uninstalling shadows is not necessary anymore and does more harm by deleting files from the core library path.
- --uninstall, -U
Uninstalls a module from the library path. It finds a packlist for given modules, and removes all the files included in the same distribution.
If you enable local::lib, it only removes files from the local::lib directory.
If you try to uninstall a module in
perldirectory (i.e. core module), an error will be thrown.
A dialog wil be prompted to confirm the files to be deleted. If you pass
-foption as well, the dialog will be skipped and uninstallation will be forced.
EXPERIMENTAL: Specifies whether to cascade search when you specify multiple mirrors and a mirror doesn't have a module or has a lower version of the module than requested. Defaults to false.
Specifies whether a module given in the command line is skipped if its latest version is already installed. Defaults to true.
PERL5LIBenvironment variable have to be correctly set for this to work with modules installed using local::lib, unless you always use the
EXPERIMENTAL: Specifies whether a module (and version) given in the command line is skipped if it's already installed.
If you run:
cpanm --skip-satisfied CGI DBI~1.2
cpanm won't install them if you already have CGI (for whatever versions) or have DBI with version higher than 1.2. It is similar to
--skip-installedchecks if the latest version of CPAN is installed,
--skip-satisfiedchecks if a requested version (or not, which means any version) is installed.
Defaults to false.
Verify the integrity of distribution files retrieved from PAUSE using CHECKSUMS and SIGNATURES (if found). Defaults to false.
Whether it report the locally installed perl version to the various web server as part of User-Agent. Defaults to true, and you can disable it by using
Specifies the number of days in which cpanm's work directories expire. Defaults to 7, which means old work directories will be cleaned up in one week.
You can set the value to
0to make cpan never cleanup those directories.
Generates man pages for executables (man1) and libraries (man3).
Defaults to true (man pages generated) unless
-L|--local-lib-containedoption is supplied in which case it's set to false. You can disable it with
Uses LWP module to download stuff over HTTP. Defaults to true, and you can say
--no-lwpto disable using LWP, when you want to upgrade LWP from CPAN on some broken perl systems.
Uses GNU Wget (if available) to download stuff. Defaults to true, and you can say
--no-wgetto disable using Wget (versions of Wget older than 1.9 don't support the
--retry-connrefusedoption used by cpanm).
Uses cURL (if available) to download stuff. Defaults to true, and you can say
--no-curlto disable using cURL.
Copyright 2010 Tatsuhiko Miyagawa.