如何获取本地安装的 Python 模块的列表?

新手上路,请多包涵

如何获取计算机上安装的 Python 模块列表?

原文由 Léo Léopold Hertz 준영 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 596
2 个回答

解决方案

不要与 pip > 10.0 一起使用!

我从 Python 脚本中获得 pip freeze 列表的 50 美分:

 import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages])
print(installed_packages_list)

作为(太长)一个班轮:

 sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

给予:

 ['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24',
 'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3',
 'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
 'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1',
 'werkzeug==0.9.4']

范围

此解决方案适用于系统范围或虚拟环境范围,并涵盖由 setuptoolspip 和( 上帝禁止easy_install 安装的软件包。

我的用例

我将此调用的结果添加到了我的烧瓶服务器,所以当我用 http://example.com/exampleServer/environment 调用它时,我得到了安装在服务器的 virtualenv 上的软件包列表。它使调试变得更加容易。

注意事项

我注意到这种技术的一个奇怪行为 - 当 Python 解释器在与 setup.py 文件相同的目录中调用时,它没有列出由 setup.py 安装的包。

重现步骤:

创建虚拟环境

$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $

使用 setup.py 克隆一个 git repo

 (test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.

我们有行为的 setup.py/tmp/behave

 (test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py

从 git repo 安装 python 包

(test_env) $ cd /tmp/behave && pip install .
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1

如果我们从 /tmp 运行上述解决方案

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'

如果我们从 /tmp/behave

 >>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'

第二个示例中缺少 behave==1.2.5a1 ,因为工作目录包含 behavesetup.py 文件。

我在文档中找不到对此问题的任何参考。也许我会为它打开一个错误。

原文由 Adam Matan 发布,翻译遵循 CC BY-SA 4.0 许可协议

help('modules')

在 Python shell/提示符中。

原文由 ChristopheD 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题