Search code examples
pythonpippypipackage-management

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


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?


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.