How to extract dependencies from a PyPi package without downloading it?

package-management, pip, pypi, python

Solution

I've just needed to find a way to do this and this is what I came up with (stolen from pip).

def dist_metadata(setup_py):
    '''Get the dist object for setup.py file'''

    with open(setup_py) as f:
        d = f.read()

    try:
        # we have to do this with current globals else
        # imports will fail. secure? not really. A
        # problem? not really if your setup.py sources are 
        # trusted
        exec d in globals(), globals()
    except SystemExit:
        pass

    return distutils.core._setup_distribution

https://stackoverflow.com/a/12505166/3332282 answers why the exec incantation is subtle and hard to get right.

Problem

I want to get the dependency of a PyPi package remotely without needing to download it completely. I seem to understand (reading the pip code) that pip when resolving dependencies seems to read the egg once the package has been downloaded. Is there any other way?

Original source

Related problems