<p><strong>更新Python 3.6和Pip 19.0.1</strong></p>
<pre><code>> from pip._internal.utils.misc import get_installed_distributions
> p = get_installed_distributions()
> pprint.pprint(p)
[wheel 0.32.3 (/usr/local/lib/python3.7/site-packages),
wcwidth 0.1.7 (/usr/local/lib/python3.7/site-packages),
virtualenv 16.0.0 (/usr/local/lib/python3.7/site-packages),
virtualenv-clone 0.3.0 (/usr/local/lib/python3.7/site-packages),
urllib3 1.24.1 (/usr/local/lib/python3.7/site-packages),
typing 3.6.6 (/usr/local/lib/python3.7/site-packages),
terminaltables 3.1.0 (/usr/local/lib/python3.7/site-packages),
...
</code></pre>
<p><strong>原始答案</strong></p>
<p>Pip只是python模块,所以只需导入它并调用<code>list</code>:</p>
^{pr2}$
<p>好吧,有更好的方法:</p>
<pre><code>pip.utils.get_installed_distributions()
</code></pre>
<p>返回已安装程序包的列表。在</p>
<pre><code>packages = pip.utils.get_installed_distributions()
p = packages[0]
p.project_name
p.version
p.egg_name
p.location
</code></pre>
<p>您可以从源代码<a href="https://github.com/pypa/pip/blob/ad577befe1eb7980c988ca6c30e13029c96dd202/pip/commands/list.py" rel="nofollow noreferrer">here</a>中看到<code>pip list</code>在做什么</p>
<p>另外,<code>get_installed_distributions</code>接受整串参数以仅返回本地包(来自当前virtualenv)等。请参阅帮助<a href="https://github.com/pypa/pip/blob/ad577befe1eb7980c988ca6c30e13029c96dd202/pip/utils/__init__.py#L326" rel="nofollow noreferrer">here</a>。在</p>
<p>还有来自<code>_vendor</code>模块的底层命令:</p>
<pre><code>[p for p in pip._vendor.pkg_resources.working_set]
</code></pre>
<p>但是<code>get_installed_distributions</code>提供了更简单的api。在</p>