How to retrieve pip requirements (freeze) within Python?

后端 未结 4 746
北海茫月
北海茫月 2020-12-17 16:41

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

相关标签:
4条回答
  • 2020-12-17 16:59

    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)
    
    0 讨论(0)
  • 2020-12-17 17:13

    There's a pip.operation.freeze in newer releases (>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
    

    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

    0 讨论(0)
  • 2020-12-17 17:13

    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
    
    0 讨论(0)
  • 2020-12-17 17:14

    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'])
    
    0 讨论(0)
提交回复
热议问题