我在git问题跟踪器上发布了这个问题:https://github.com/pypa/pip/issues/2969
我们可以在python中调用pip freeze/list,即不是shell上下文吗?
我希望能够导入pip并执行items = pip.freeze()之类的操作.调用pip.main(['freeze'])写入stdout,不返回str值.
Rex*_*din 21
在较新的版本(> 1.x)中有一个pip.operation.freeze:
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
Run Code Online (Sandbox Code Playgroud)
输出符合预期:
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
Zak*_*Zak 14
pip 不支持这里的其他答案:https ://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program
根据 pip 开发人员的说法:
如果您直接导入 pip 的内部结构并使用它们,那么这不是受支持的用例。
尝试
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
Run Code Online (Sandbox Code Playgroud)
sed*_*deh 10
不建议依赖“私有”函数,例如pip._internal.operatons. 您可以执行以下操作:
import pkg_resources
env = dict(tuple(str(ws).split()) for ws in pkg_resources.working_set)
Run Code Online (Sandbox Code Playgroud)