首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取本地安装的Python模块列表?

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

Stack Overflow用户
提问于 2009-04-11 12:34:18
回答 21查看 1.5M关注 0票数 1.1K

我想获得Python模块的列表,这些模块在我的Python安装(UNIX服务器)中。

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

EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2014-05-27 17:05:43

解决方案

不要与pip > 10.0一起使用!

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

代码语言:javascript
复制
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)

作为一个(过长的)一行:

代码语言:javascript
复制
sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

给予:

代码语言:javascript
复制
['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和(god forbid) easy_install安装的软件包。

我的用例

我将此调用的结果添加到我的flask服务器,因此当我使用http://example.com/exampleServer/environment调用它时,我会得到安装在服务器的virtualenv上的包的列表。它使调试变得容易得多。

注意事项

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

重现步骤:

创建虚拟环境

代码语言:javascript
复制
$ 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存储库

代码语言:javascript
复制
(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.

我们在/tmp/behave中有behave的setup.py

代码语言:javascript
复制
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py

从git资源库安装python包。

代码语言:javascript
复制
(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运行前面提到的解决方案

代码语言:javascript
复制
>>> 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运行前面提到的解决方案

代码语言:javascript
复制
>>> 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文件。

我在文档中找不到任何关于这个问题的参考。也许我应该为它打开一个bug。

票数 650
EN

Stack Overflow用户

发布于 2009-04-11 12:45:45

代码语言:javascript
复制
help('modules')

在Python shell/提示符中。

票数 1.2K
EN

Stack Overflow用户

发布于 2013-07-26 06:56:32

从pip版本1.3开始,您可以访问:

代码语言:javascript
复制
pip list

这似乎是“点点冻结”的句法糖。它将列出特定于您的安装或virtualenv的所有模块,以及它们的版本号。不幸的是,它不会显示任何模块的当前版本号,也不会洗你的碗或擦你的鞋。

票数 129
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/739993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档