---
name: "carton-install"
section: "1p"
platform: "linux"
package: "carton"
version: "0.9.7-1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/carton-install"
---

# carton-install(1p)

Install the dependencies

## NAME

carton-install - Install the dependencies

## SYNOPSIS

```
  carton install [--deployment] [--path=PATH] [modules...]
```

## DESCRIPTION

Install the dependencies for your application. This command has two modes and the behavior is slightly different.

### DEVELOPMENT MODE

- carton install (no arguments)

  If you run `"carton install"` without any arguments and if *cpanfile* exists, carton will scan dependencies from *cpanfile* and install the modules.

In either way, if you run `"carton install"` for the first time (i.e. *carton.lock* does not exist), carton will fetch all the modules specified, resolve dependencies and install all required modules from CPAN.

If *carton.lock* file does exist, carton will still try to install modules specified or updated in *cpanfile*, but uses *carton.lock* for the dependency resolution, and then cascades to CPAN.

carton will analyze all the dependencies and their version information, and it is saved into *carton.lock* file. It is important to add *carton.lock* file into a version controlled repository and commit the changes as you update your dependencies.

### DEPLOYMENT MODE

If you specify the `"--deployment"` command line option or the *carton.lock* exists and *cpanfile* does not exist, carton will fetch all remote modules and use the dependencies specified in the *carton.lock* instead of resolving dependencies.

## CONSERVATIVE UPDATE

`"carton install"` doesn't update the modules already installed into *local* library path as long as the version is satisfied.

For example, one day you install URI-1.50 from CPAN:

```
  > carton install URI
  Successfully installed URI-1.50
```

Few weeks later, URI module is updated to 1.51 on CPAN. If you run the `"carton install URI"` again:

```
  > carton install URI
  You have URI (1.50)
```

because you haven't specified the version number, carton won't update the module in your local library path.

**WARNINGS: following commands are not implemented**

If you want to update to the latest version of CPAN, you can either use `"carton update"` command, or specify the required version either in your *cpanfile*.

```
 > carton update URI
 > cat cpanfile
 requires 'URI', 1.51;
```

Any of those will upgrade URI to the latest one from CPAN, and the version specified in the *carton.lock* will be bumped.

## OPTIONS

- \--deployment

  Force the deployment mode and carton will ignore *cpanfile* contents.

- \--path

  Specify the path to install modules to. Defaults to *local* in the current directory.
