Skip to content Skip to sidebar Skip to footer

How To Retrieve Pip Requirements (freeze) Within Python?

I posted this question on the git issue tracker: https://github.com/pypa/pip/issues/2969 Can we have some manner of calling pip freeze/list within python, i.e. not a shell context?

Solution 1:

There's a pip.operation.freeze in newer releases (>1.x):

try:
    from pip._internal.operations import freeze
except ImportError:  # pip < 10.0from pip.operations import freeze

x = freeze.freeze()
for p in x:
    print p

Output is as expected:

amqp==1.4.6 anyjson==0.3.3 billiard==3.3.0.20 defusedxml==0.4.1 Django==1.8.1 django-picklefield==0.3.1 docutils==0.12 ... etc

Solution 2:

The other answers here are unsupported by pip: https://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program

According to pip developers:

If you're directly importing pip's internals and using them, that isn't a supported usecase.

try

reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])

Solution 3:

It's not recommended to rely on a "private" function such as pip._internal.operatons. You can do the following instead:

import pkg_resources
env = dict(tuple(str(ws).split()) for ws in pkg_resources.working_set)

Solution 4:

Actually from pip >= 10.0.0 package operations.freeze has moved to pip._internal.operations.freeze.

So the safe way to import freeze is:

try:
    from pip._internal.operations import freeze
except ImportError:
    from pip.operations import freeze

Post a Comment for "How To Retrieve Pip Requirements (freeze) Within Python?"