如何获得在计算机上安装的Python模块列表?
当前回答
我比较了五种方法来检索已安装的“模块”,所有这些都是我在这个线程中看到的
iter_modules | help("modules") | builtin_module_names | pip list | working_set | |
---|---|---|---|---|---|
Includes distributions | ❌ | ❌ | ❌ | ✔️ | ✔️ |
Includes modules (No built-in) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
Includes built-in modules | ❌ | ✔️ | ✔️ | ❌ | ❌ |
Includes frozen | ✔️ | ✔️ | ❌ | ❌ | ❌ |
Includes venv | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
Includes global | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
Includes editable installs | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
Includes PyCharm helpers | ✔️ | ❌ | ❌ | ❌ | ❌ |
Lowers capital letters | ❌ | ❌ | ❌ | ❌ | ✔️ |
Time taken (665 modules total) | 53.7 msec | 1.03 sec | 577 nsec | 284 msec | 36.2 usec |
总结
PIP list和working_set是针对发行版的,而不是模块的。 Iter_modules和help("modules")非常相似,最大的区别是Iter_modules不包含内置模块。 PIP list和working_set非常相似,唯一不同的是working_set降低了所有大写字母。 内置模块只包含在help("modules")和builtin_module_names中。
相关的说明
发行版、包和模块通常具有相同的名称,因此很容易将它们误认为另一个。 importlib.util。Find_spec用于模块,区分大小写。 sys。Modules只列出导入的模块。
分布
我说分发而不是打包,因为我认为这样会减少误解。一个发行版/包可以包含多个包/模块。
已安装的发行版并不总是可以通过相同的名称导入。例如pip install Pillow是进口PIL。有时,一个发行版甚至可以导入多个模块。
方法(每列按顺序排列)
iter_modules
import pkgutil
{module.name for module in pkgutil.iter_modules()}
帮助("modules")(仅在终端中打印)
help("modules")
builtin_module_names
import sys
set(sys.builtin_module_names)
pip列表(仅在终端打印)
终端PIP清单
working_set
import pkg_resources
{pkg.key for pkg in pkg_resources.working_set}
结论
对于终端,我建议使用help("modules")或python -c "help("modules") "。 在这个帖子中投票最多的答案 对于编程方式,我建议使用iter_modules + builtin_module_names。 这个答案在这个帖子里 然而,这是非常复杂的信息,请看我下面的最小示例。
import sys
import pkgutil
def get_installed_modules_names():
iter_modules = {module.name for module in pkgutil.iter_modules()}
builtin = sys.builtin_module_names
return set.union(iter_modules, builtin)
其他回答
从外壳开始
ls site-packages
如果没有帮助,你可以这样做。
import sys
import os
for p in sys.path:
print os.listdir( p )
看看会产生什么。
pip install pip-chill
pip-chill
我在OS x上遇到了一个自定义安装的python 2.7。它需要X11来列出已安装的模块(使用help和pydoc)。
为了能够在不安装X11的情况下列出所有模块,我运行pydoc作为http-server,即:
pydoc -p 12345
然后,可以将Safari定向到http://localhost:12345/以查看所有模块。
从pip 10开始,接受的答案将不再有效。开发团队已经删除了对get_installed_distribution例程的访问。在setuptools中有一个替代函数可以做同样的事情。下面是一个适用于pip 10的替代版本:
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
请让我知道它是否会工作在以前版本的pip,太。
有很多想法,我首先思考的是这两个:
pip
缺点:不总是安装
帮助(“模块”)
缺点:输出到控制台;使用损坏的模块(参见ubuntu…)可以段错误
我需要一个简单的方法,使用基本库,并与旧的python 2.x兼容
我明白了:listmodules.py
在2.5版本的文档源目录中隐藏了一个小脚本,它列出了Python安装的所有可用模块。
优点:
只使用imp、sys、os、re、time 设计用于运行Python 1.5.2及更新版本 源代码非常紧凑,所以你可以很容易地修补它,例如传递一个有bug的模块的异常列表(不要试图导入它们)
推荐文章
- 试图在Windows 10上运行Python时出现“权限被拒绝”
- 如何在Django中设置时区
- 即使模板文件存在,Flask也会引发TemplateNotFound错误
- defaultdict的嵌套defaultdict
- 构造tkinter应用程序的最佳方法?
- 如何在Python中逐行打印字典?
- 当试图运行Python脚本时,“ImportError:没有命名模块”
- pylab和pyplot的区别是什么?
- Argparse:确定使用了哪个子解析器
- django导入错误-没有core.management模块
- 在芹菜中检索队列中的任务列表
- 使用beautifulsoup提取属性值
- 如何禁用标准错误流的日志记录?
- 用Matplotlib在Python中绘制时间
- 类中的Python装饰器