Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Running sudo apt-get install <PACKAGE> will install the package, its dependencies, and any other recommended packages.

However, there does not seem to be a way to install only the dependencies of a package and exclude the package itself.

How would one go about doing this?

share|improve this question
    
Just curious, why do you want to do this? – Kris Harper Nov 1 '11 at 18:01
    
@root45: Well it's a bit of a unique situation: I have the source code to a Python package in the repos. and it isn't starting. I need to install the dependencies for the package without installing the package itself (since I already have the code). – Nathan Osman Nov 1 '11 at 18:04
1  
Couldn't you just do a dry-run of apt-get install and look at what is going to get installed, then just install everything but the app you are compiling? – duffydack Nov 1 '11 at 18:11
2  
Or just install it and then remove the application (but not its dependencies). And/or install an updated/fixed package after building it. – JanC Nov 1 '11 at 18:27
    
I need the ability to do this so I can build and install a source package that isn't already built for my architecture. apt-get build-dep installs build dependencies, so apt-get -b source works, but runtime dependencies aren't installed, so dpkg -i *.deb fails. – Trevor Robinson Jan 26 '12 at 22:03
up vote 15 down vote accepted

This will install all packages in the package's Depends and PreDepends field:

sudo apt-get install $(apt-cache depends <PACKAGE> | grep Depends | sed "s/.*ends:\ //" | tr '\n' ' ')

Basically you ask for all dependencies, filter out the (Pre)Depends, and format that output for apt-get.

One problem are dependencies like

Depends: pulseaudio
  pulseaudio:i386

or virtual packages like

Depends: <java6-runtime-headless>
  default-jre-headless
  openjdk-6-jre-headless

So: use with care - it doesn't work in all cases!

share|improve this answer
1  
There are a lot of cases this doesn't handle, e.g. it will completely break on virtual packages (which are printed in angle brackets). See here for examples: askubuntu.com/questions/25361/… – Trevor Robinson Jan 26 '12 at 22:06
    
Thanks for the hint, though I'm not really sure how the handle all those issues. :-( – htorque Jan 26 '12 at 22:10
    
If I may, I'd like to suggest simpler solution with AWK: sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}') – Serg Nov 18 '15 at 21:12
    
I ran into the virtual package issue you mention above; updating sed in the pipeline to the following worked for me: sed -e "s/.*ends:\ //" -e 's/<[^>]*>//'. In my case, the virtual package in < > was preceded by the package satisfying it, so removing the item in < > worked fine. – berto Mar 16 at 14:27

To list all dependencies of a given package not being installed, you could use aptitude

aptitude search '!~i?reverse-depends("^PACKAGE_NAME$")'

To install the dependencies

aptitude search '!~i?reverse-depends("^PACKAGE_NAME$")' -F "%p" | xargs sudo apt-get install

Examples

  • List the dependencies

    % aptitude search '!~i?reverse-depends("^mc$")'
    p    mc-data         - Midnight Commander - a powerful file manager -- data files
    
  • Show only the package name

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p"
    mc-data                            
    
  • Install the dependencies for, e.g. mc

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p" | xargs sudo apt-get install     
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following NEW packages will be installed:
      mc-data
    0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Need to get 1.166 kB of archives.
    After this operation, 5.550 kB of additional disk space will be used.
    Get:1 http://archive.ubuntu.com/ubuntu/ wily/universe mc-data all 3:4.8.13-3 [1.166 kB]
    Fetched 1.166 kB in 0s (1.250 kB/s)
    Selecting previously unselected package mc-data.
    (Reading database ... 606748 files and directories currently installed.)
    Preparing to unpack .../mc-data_3%3a4.8.13-3_all.deb ...
    Unpacking mc-data (3:4.8.13-3) ...
    Processing triggers for doc-base (0.10.6) ...
    Processing 1 added doc-base file...
    Registering documents with scrollkeeper...
    Processing triggers for man-db (2.7.4-1) ...
    Processing triggers for hicolor-icon-theme (0.15-0ubuntu1) ...
    Setting up mc-data (3:4.8.13-3) ...
    
share|improve this answer

If you don't mind copy/past, just simulate an apt-get install with -s. That way you will see which other packages will get installed and/or upgrade, then you just remove the package name you don't want to install from that list and voila.

sudo apt-get install -s <package>

share|improve this answer

apt-get build-dep <package> will do the trick.

share|improve this answer
10  
That won't work because the package has runtime dependencies that won't be installed with apt-get build-dep. – Nathan Osman Sep 19 '12 at 1:35

To install dependencies only, you can use apt-cache show package | grep Depends. This will give you a list of dependencies:

apt-cache show apache2 | grep Depends
Depends: apache2-mpm-worker (= 2.2.22-6ubuntu5.1) | apache2-mpm-prefork (= 2.2.22-6ubuntu5.1) | apache2-mpm-event (= 2.2.22-6ubuntu5.1) | apache2-mpm-itk (= 2.2.22-6ubuntu5.1), apache2.2-common (= 2.2.22-6ubuntu5.1)

then you can decide what package install with apt-get. There is also aptitude in the interactive mode, you look for the package select it and then install it's dependencies:

enter image description here

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.