¿Cómo recuperar los requisitos de pip (congelar) dentro de Python?

Publiqué esta pregunta en el rastreador de problemas de git: https://github.com/pypa/pip/issues/2969

¿Podemos tener alguna forma de llamar a pip freeze / list dentro de python, es decir, no a un contexto de shell?

Quiero poder importar pip y hacer algo como requisitos = pip.freeze (). Al llamar a pip.main ([‘freeze’]) se escribe en stdout, no devuelve los valores de cadena.

Hay un pip.operation.freeze en las versiones más recientes (> 1.x):

try: from pip._internal.operations import freeze except ImportError: # pip < 10.0 from pip.operations import freeze x = freeze.freeze() for p in x: print p 

La salida es la esperada:

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

En realidad, desde pip >= 10.0.0 paquete operations.freeze ha movido a pip._internal.operations.freeze .

Así que la forma segura de importar freeze es:

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