如何获得在计算机上安装的Python模块列表?
当前回答
现在,我自己尝试了这些方法,我得到了广告中所说的:所有的模块。
唉,实际上你不太关心stdlib,你知道安装python会得到什么。
真的,我想要我安装的东西。
令人惊讶的是,实际上效果还不错的是:
pip freeze
返回:
Fabric==0.9.3
apache-libcloud==0.4.0
bzr==2.3b4
distribute==0.6.14
docutils==0.7
greenlet==0.3.1
ipython==0.10.1
iterpipes==0.4
libxml2-python==2.6.21
我说“令人惊讶”是因为包安装工具是人们期望找到这个功能的确切位置,尽管不是在“冻结”的名称下,但python打包是如此奇怪,以至于我惊讶于这个工具是有意义的。Pip 0.8.2, Python 2.7。
其他回答
在正常情况下使用即可
pydoc modules
PIP冻结可以找到所有的包,但是你可以简单地写下面的命令来列出python包所在的所有路径。
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
我通常使用pip list来获取包的列表(带有版本)。
当然,这也适用于虚拟环境。要显示只在虚拟环境中安装了什么(而不是全局包),请使用pip list——local。
下面的文档显示了所有可用的pip列表选项,并提供了几个很好的示例。
警告:Adam Matan不鼓励在pip > 10.0中使用此功能。另外,请阅读下面@sinoroc的评论
这是受到Adam Matan的回答(公认的答案)的启发:
import tabulate
try:
from pip import get_installed_distributions
except:
from pip._internal.utils.misc import get_installed_distributions
tabpackages = []
for _, package in sorted([('%s %s' % (i.location, i.key), i) for i in get_installed_distributions()]):
tabpackages.append([package.location, package.key, package.version])
print(tabulate.tabulate(tabpackages))
然后打印出一个表格的形式
19:33 pi@rpi-v3 [iot-wifi-2] ~/python$ python installed_packages.py
------------------------------------------- -------------- ------
/home/pi/.local/lib/python2.7/site-packages enum-compat 0.0.2
/home/pi/.local/lib/python2.7/site-packages enum34 1.1.6
/home/pi/.local/lib/python2.7/site-packages pexpect 4.2.1
/home/pi/.local/lib/python2.7/site-packages ptyprocess 0.5.2
/home/pi/.local/lib/python2.7/site-packages pygatt 3.2.0
/home/pi/.local/lib/python2.7/site-packages pyserial 3.4
/usr/local/lib/python2.7/dist-packages bluepy 1.1.1
/usr/local/lib/python2.7/dist-packages click 6.7
/usr/local/lib/python2.7/dist-packages click-datetime 0.2
/usr/local/lib/python2.7/dist-packages construct 2.8.21
/usr/local/lib/python2.7/dist-packages pyaudio 0.2.11
/usr/local/lib/python2.7/dist-packages tabulate 0.8.2
------------------------------------------- -------------- ------
这可以让您轻松地辨别安装了哪些包,哪些包没有安装sudo。
顺便说一句:我注意到,当我通过sudo安装一个包一次而不安装一次时,一个包优先,这样另一个包就不会被列出(只显示一个位置)。我相信只有本地目录中的文件才会被列出。这是可以改进的。
我比较了五种方法来检索已安装的“模块”,所有这些都是我在这个线程中看到的
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)
推荐文章
- 如何安装没有根访问权限的python模块?
- 尝试模拟datetime.date.today(),但不工作
- 将行添加到数组
- 如何在Python中直接获得字典键作为变量(而不是通过从值搜索)?
- Python:为什么functools。部分有必要吗?
- 如何用python timeit对代码段进行性能测试?
- Python迭代器中的has_next ?
- ConfigParser中的列表
- 由于环境错误无法安装包:[Errno 13]
- 如何测试一个字符串是否包含列表中的一个子字符串,在熊猫?
- 'datetime'模块没有'strptime'属性
- 如何将字典保存到文件?
- 如何在Python中绘制网格?
- 在Python中元组比较是如何工作的?
- 我如何写好的/正确的包__init__.py文件