Setuptools setup.py installing when dependencies not satisfied
Question: I have a `setup.py` that looks a bit (okay, exactly) like this:

    
    
    #!/usr/bin/env python
    
    from setuptools import setup
    import subprocess
    import distutils.command.build_py
    
    class BuildWithMake(distutils.command.build_py.build_py):
        """
        Build using make.
        Then do the default build logic.
    
        """
        def run(self):
            # Call make.
            subprocess.check_call(["make"])
    
            # Keep installing the Python stuff
            distutils.command.build_py.build_py.run(self)
    
    
    setup(name="jobTree",
        version="1.0",
        description="Pipeline management software for clusters.",
        author="Benedict Paten",
        author_email="benedict@soe.ucsc.edu",
        url="http://hgwdev.cse.ucsc.edu/~benedict/code/jobTree.html",
        packages=["jobTree", "jobTree.src", "jobTree.test", "jobTree.batchSystems",
        "jobTree.scriptTree"],
        package_dir= {"": ".."},
        install_requires=["sonLib"],
        # Hook the build command to also build with make
        cmdclass={"build_py": BuildWithMake},
        # Install all the executable scripts somewhere on the PATH
        scripts=["bin/jobTreeKill", "bin/jobTreeStatus", 
        "bin/scriptTreeTest_Sort.py", "bin/jobTreeRun", 
        "bin/jobTreeTest_Dependencies.py", "bin/scriptTreeTest_Wrapper.py", 
        "bin/jobTreeStats", "bin/multijob", "bin/scriptTreeTest_Wrapper2.py"])
    

It installs the package perfectly fine when run with `./setup.py install`.
However, it does this whether or not the "sonLib" package is installed,
ignoring the dependency.

Is this expected behavior? Should a `setup.py install` blithely proceed if the
dependencies are not installed, leaving it up to pip or whatever to install
them beforehand? If not, and `setup.py install` ought to fail when
dependencies are absent, what am I doing wrong?

**EDIT** : Some version information:

    
    
    Python 2.7.2 (default, Jan 19 2012, 21:40:50) 
    [GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import setuptools
    >>> setuptools.__version__
    '0.6c12'
    >>> 
    


Answer: The [default `install` command for Distutils
`setup`](https://docs.python.org/3/distutils/commandref.html#installing-
modules-the-install-command-family) doesn't know anything about dependencies.
If you are running that, you're right that dependencies will not be checked.

Just going by what you've show in the `setup.py`, though, you are using
Setuptools for the `setup` function. The [Setuptools `install`
command](https://setuptools.pypa.io/en/latest/setuptools.html#install-run-
easy-install-or-old-style-installation) is declared to run `easy_install`,
which in turn does check and download dependencies.

It is possible you are explicitly invoking the Distutils `install`, by
specifying `install --single-version-externally-managed`.

