一个人在googlecolab上安装了多少个pip软件包



我可以执行!pip list来查看所有包的列表。

我可以这样做来统计python 3.7文件夹中的所有子文件夹:

import os
containing_folder = '/usr/local/lib/python3.7/dist-packages'

f = []
for (dirpath, dirnames, filenames) in os.walk(containing_folder):
f.extend(dirnames)
break
print('there are', len(f), 'folders in the python 3.7 module')

但是文件夹的数量并不等于模块的数量,因为似乎存在比模块更多的文件。

那么,我如何识别所有模块(而不是文件夹(呢?(即统计所有pip安装的文件夹(。

Python包由名为__init__.py的文件的存在来表示。因此,如果你想根据这个正式定义来计算包,你可以只计算你找到的具有这个名称的文件的数量。以下代码可以做到这一点:

import os
containing_folder = '/usr/local/lib/python3.7/dist-packages'
f = []
for (dirpath, dirnames, filenames) in os.walk(containing_folder):
if '__init__.py' in filenames:
f.append(os.path.basename(dirpath))
print(f)
print('there are', len(f), 'folders in the python 3.7 module')

如果你只想计算目录第一级的包数量,这可能是你想要的,下面的代码可以做到这一点:

import os
containing_folder = '/usr/local/lib/python3.7/dist-packages'
r = []
for entity in os.listdir(containing_folder):
f = os.path.join(containing_folder, entity, '__init__.py')
if os.path.isdir(os.path.join(containing_folder, entity)) and os.path.join(entity) and os.path.exists(f):
r.append(entity)
print(len(r))

当我在我的一个Python安装上运行这段代码,并将其与我在同一版本的Python上执行pip list | wc -l时得到的结果进行比较时,我得到了几乎相同的结果。。。125表示Python代码,129表示pip

您可以通过编程方式使用pip(尽管坦率地说,找到这方面的文档有点困难(。理论上,您可以使用import pip并使用其内部API来获取您想要的信息,但文档不鼓励这样做,而是建议您像使用任何非本地外部实用程序一样使用pip

import subprocess
packages = subprocess.run(
['pip', 'list'].
check=True, text=True, capture_output=True)
packagelist = packages.stdout.splitlines()

关于subprocess,有很多细节可以从更详细的解释中受益,但以前已经做过很多次了。也许在这个讨论中,主要要注意的是,当你想要避免shell=True(如果可以的话,你想要(时,在类Unix系统上需要将第一个参数作为令牌列表传递。

最新更新