How to list dependencies for a python library without installing?

Question:

Is there a way to get a list of dependencies for a given python package without installing it first?

I can currently get a list of requirements, but it requires installing the packages. For example, I can use pip to show basic requirements info, but it doesn’t include version information:

$ pip show pytest
Name: pytest
Version: 3.0.6
...
Requires: colorama, setuptools, py

I’ve tried a library called pipdeptree that includes much better output on requirements, but it also requires installation of the packages

$ pipdeptree -p pytest
pytest==3.0.6
- colorama [required: Any, installed: 0.3.7]
- py [required: >=1.4.29, installed: 1.4.32]
- setuptools [required: Any, installed: 34.0.0]
  - appdirs [required: >=1.4.0, installed: 1.4.0]
...

Ideally, I would get the level of detail that pipdeptree provides. Also, being able to produce a requirements.txt file from a python wheel or from pypi with pip would suffice as well.

I’m interested in the dependency constraints for a given package, not the final downloaded packages after resolving the dependency requirements. For example, I don’t really care that pip downloaded package-2.3.4, I would rather know that package>=2.1 was a requirement.

Asked By: Brendan Abel

||

Answers:

If you don’t mind installing conda, this might do the trick for you:

$ conda info numpy=1.11.1 python=3.6.3 

The version numbers of the package or of python are optional (all versions will then be described)

Answered By: ShpielMeister

PyPi provides a JSON endpoint with package metadata:

>>> import requests
>>> url = 'https://pypi.org/pypi/{}/json'
>>> json = requests.get(url.format('pandas')).json()
>>> json['info']['requires_dist']
['numpy (>=1.9.0)', 'pytz (>=2011k)', 'python-dateutil (>=2.5.0)']
>>> json['info']['requires_python']
'>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*'

For a specific package version, add an additional version segment to the URL:

https://pypi.org/pypi/pandas/0.22.0/json
Answered By: oabv

Actually, conda gives you two options for this:

conda info {package}
conda install --dry-run {package}

I hear sometimes the latter will install the package if you provide other flags, so I would use the former.

Answered By: Adam Erickson
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.