488

I need to install only 1 package for my SF2 distribution (DoctrineFixtures).

When I run

php composer.phar update 

I get

 - Updating twig/twig (dev-master 39d94fa => v1.13.0) The package has modified files: M CHANGELOG M doc/filters/batch.test M doc/filters/index.rst M doc/filters/url_encode.rst M doc/functions/index.rst M doc/tags/index.rst M doc/tests/index.rst M lib/Twig/Autoloader.php M lib/Twig/Compiler.php M lib/Twig/CompilerInterface.php -10 more files modified, choose "v" to view the full list 

It appears the last developer edited a lot of files inside vendor.

In order to get around this, I tried

php composer.phar update <package_name> 

But that doesn't seem to work. How can I update/install only one library from composer.json?

6
  • 1
    Your are using the right command. Can you show us your composer.json? Commented May 24, 2013 at 17:33
  • please try with the commands provided in my answer otherwise please provide a description of the error you get ( i.e. composer output if composer is complaining ) Commented May 24, 2013 at 18:02
  • Your composer.json might refer to an alternate fork of a project. Commented Jul 9, 2014 at 17:44
  • I updated a specific dependency in my laravel project and specifying the specific component to install explicitly: composer update laravelcollective/html. That seemed to work. Commented Aug 31, 2015 at 17:32
  • "But that doesn't seem to work" why do you think so? Commented Jul 28, 2022 at 10:04

8 Answers 8

764

To install doctrine/doctrine-fixtures-bundle with version 2.1.* and minimum stability @dev use this:

composer require doctrine/doctrine-fixtures-bundle:2.1.*@dev 

then to update only this single package:

composer update doctrine/doctrine-fixtures-bundle 
Sign up to request clarification or add additional context in comments.

8 Comments

May be helpful: running update/install with -vvv (verbose mode: composer.phar update -vvv package/package) can sometimes be better as occasionally an interactive prompt will appear which may be otherwise hidden
always update optimizing ClassMap. "composer update -o" , add "-o" parameter
> composer.phar update doctrine/doctrine-fixtures-bundle this updates all other packages too (((
Does not work, this updates many packages
It's worth pointing out that although this updates the specific package as requested - if your composer.lock file has anything set to be removed - these will get uninstalled! :(
|
251
+300

If you just want to update a few packages and not all, you can list them as such:

php composer.phar update vendor/package:2.* vendor/package2:dev-master 

You can also use wildcards to update a bunch of packages at once:

php composer.phar update vendor/* 

As commented by @ZeroThe2nd ZSH users may need to wrap their vendor/* in quotation marks:

php composer.phar update "vendor/*" 
  • --prefer-source: Install packages from source when available.
  • --prefer-dist: Install packages from dist when available.
  • --ignore-platform-reqs: ignore php, hhvm, lib-* and ext-* requirements and force the installation even if the local machine does not fulfill these. See also the platform config option.
  • --dry-run: Simulate the command without actually doing anything.
  • --dev: Install packages listed in require-dev (this is the default behavior).
  • --no-dev: Skip installing packages listed in require-dev. The autoloader generation skips the autoload-dev rules.
  • --no-autoloader: Skips autoloader generation.
  • --no-scripts: Skips execution of scripts defined in composer.json.
  • --no-plugins: Disables plugins.
  • --no-progress: Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters.
  • --optimize-autoloader (-o): Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default.
  • --lock: Only updates the lock file hash to suppress warning about the lock file being out of date.
  • --with-dependencies: Add also all dependencies of whitelisted packages to the whitelist.
  • --prefer-stable: Prefer stable versions of dependencies.
  • --prefer-lowest: Prefer lowest versions of dependencies. Useful for testing minimal versions of requirements, generally used with --prefer-stable.

1 Comment

Please note that ZSH users may need to wrap their vendor/* in quotation marks: composer update "vendor/*"
181

Difference between install, update and require

Assume the following scenario:

composer.json

"parsecsv/php-parsecsv": "0.*" 

composer.lock file

 "name": "parsecsv/php-parsecsv", "version": "0.1.4", 

Latest release is 1.1.0. The latest 0.* release is 0.3.2

install: composer install parsecsv/php-parsecsv

This will install version 0.1.4 as specified in the lock file

update: composer update parsecsv/php-parsecsv

This will update the package to 0.3.2. The highest version with respect to your composer.json. The entry in composer.lock will be updated.

require: composer require parsecsv/php-parsecsv

This will update or install the newest version 1.1.0. Your composer.lock file and composer.json file will be updated as well.

12 Comments

awesome, so to refresh one package within the constrained version it's composer update author/package and then composer install author/package
@WilliamRandokun if you have installed it before, then just composer update package is enough, no need to call install after it
exactly what I am looking for. well explained. upvoted
IMHO this should be the accepted answer as it highlights the upgrade constrains both from composer.json and composer.lock
tnx. I never knew that composer require updates also the package to latest version.
|
29

You can use the following command to update any module with its dependencies

composer update vendor-name/module-name --with-dependencies 

Comments

19

You can basically do following one to install new package as well.

php composer.phar require 

then terminal will ask you to enter the name of the package for searching.

$ Search for a package []: //Your package name here 

Then terminal will ask the version of the package (If you would like to have the latest version just leave it blank)

$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here 

Then you just press the return key. Terminal will ask for another package, if you dont want to install another one just press the return key and you will be done.

Comments

17

Just use

composer require {package/packagename} 

like

composer require phpmailer/phpmailer 

if the package is not in the vendor folder.. composer installs it and if the package exists, composer update package to the latest version.

Update:

require install or update the latest package version. if you want update one package just use update.

3 Comments

That won't work as expected, as it would put the library into composer.json. This is not needed for updating a package
Does not work as expected. It also updates / downgrades other packages in the process.
@Black require install or update the latest package version. if you wanna update one package just use update. Answer updated.
6

To ensure that composer update one package already installed to the last version within the version constraints you've set in composer.json remove the package from vendor and then execute :

php composer.phar update vendor/package 

1 Comment

You will find the same suggestion in this post : github.com/composer/composer/issues/3112. PS: Down vote without explanation is so easy to do and so useless.
5

Because you wanted to install specific package "I need to install only 1 package for my SF2 distribution (DoctrineFixtures)."

php composer.phar require package/package-name:package-version would be enough

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.