In addition to the pip show [package name] command, there is pipdeptree.
Just do
$ pip install pipdeptree
then run
$ pipdeptree
and it will show you your dependencies in a tree form, e.g.,
flake8==2.5.0
- mccabe [required: >=0.2.1,<0.4, installed: 0.3.1]
- pep8 [required: !=1.6.0,>=1.5.7,!=1.6.1,!=1.6.2, installed: 1.5.7]
- pyflakes [required: >=0.8.1,<1.1, installed: 1.0.0]
ipdb==0.8
- ipython [required: >=0.10, installed: 1.1.0]
The project is located at https://github.com/naiquevin/pipdeptree, where you will also find usage information.
Try to use show command in pip, for example:
$ pip show tornado
---
Name: tornado
Version: 4.1
Location: *****
Requires: certifi, backports.ssl-match-hostname
Update (retrieve deps with specified version):
from pip._vendor import pkg_resources
_package_name = 'somepackage'
_package = pkg_resources.working_set.by_key[_package_name]
print([str(r) for r in _package.requires()]) # retrieve deps from setup.py
Output: ['kombu>=3.0.8',
'billiard>=3.3.0.13',
'boto>=2.26']
Quite a few answers here show pip being imported for use in programs. The documentation for pip strongly advises against this usage of pip.
Instead of accessing pkg_resources via the pip import, you can actually just import pkg_resources directly and use the same logic (which is actually one of the suggested solutions in the pip docs linked for anyone wanting to see package meta information programmatically) .
import pkg_resources
_package_name = 'yourpackagename'
def get_dependencies_with_semver_string():
package = pkg_resources.working_set.by_key[_package_name]
return [str(r) for r in package.requires()]
If you're having some trouble finding out exactly what your package name is, the WorkingSet instance returned by pkg_resources.working_set implements __iter__ so you can print all of them and hopefully spot yours in there :)
i.e.
import pkg_resources
def print_all_in_working_set():
ws = pkg_resources.working_set
for package_metadata in ws:
print(package_metadata)
This works with both python 2 and 3 (though you'll need to adjust the print statements for python2).
Brief summary about the methods that are found and tested on the Windows machine:
Parse the json file of PyPI: https://pypi.org/pypi/<package>/<version>/json (#7)
Check /site-packages/<package-version>.dist-info/METADATA (#13, pre-installation required)
pip install --no-install <package>: deprecated (#11)
pip install --download <package>: deprecated (#12)
pip show <package> (#1, #2, pre-installation required)
Write a script with import pip and pip._vendor.pkg_resources: deprecated (#6)
Write a script with import pkg_resources of setuptools package (#4, pre-installation required)
https://libraries.io/ (#5)
Use pipdeptree package (#3, #8, pre-installation required)
Use Johnnydep package (#10): Test hangs in many cases.
conda info [package_name]: deprecated (#9)
conda search [package_name] --info
vc2015_runtime, python_abi, libflang, and etc.conda search "Django==3.2" --info -c conda-forge
django 3.2 pyhd3eb1b0_0
-----------------------
file name : django-3.2-pyhd3eb1b0_0.conda
...
timestamp : 2021-04-06 20:19:41 UTC
dependencies:
- asgiref
- psycopg2
- python
- pytz
- sqlparse
django 3.2 pyhd8ed1ab_0
-----------------------
file name : django-3.2-pyhd8ed1ab_0.tar.bz2
...
timestamp : 2021-04-07 21:15:25 UTC
dependencies:
- asgiref >=3.3.2,<4
- python >=3.6
- pytz
- sqlparse >=0.2.2
One more thing to note is that each method can provide a different result.
For example, requests/setup.py identifies chardet, idna, urllib3, and certifi are required. Moreover, extra packages pyOpenSSL, cryptography, socks, PySocks, win-inet-pton can be needed.
chardet, idna, urllib3, and certifi.requests is installed using pip in the Linux docker.chardet, idna, urllib3, and certifi if requests is installed in the conda environment of the Windows machine.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With