Conda 命令列出包的大小
Conda command to list size of packages
想知道conda包的大小,删掉大的和很少用的。我应该使用哪个 conda 命令来找出包的大小?
conda list
将列出包裹但不显示包裹大小。
我欢迎使用其他方法来确定包裹大小。
我正在使用 Windows10.
如果您担心用完磁盘 space,您可以 运行 此命令清理 conda 用于设置您的环境的所有临时包、zip 文件等。
conda clean --all
这些文件会保留下来,并且随着时间的推移会使您的磁盘变得混乱。
使用
du -h -s $(conda info --base)/envs/test-1
为包的文件大小
du tool
可以告诉您特定目录占用了多少磁盘 space。
例如,创建一个相同的 conda 环境 (Miniconda) 并检查其磁盘使用情况,如下所示:
$ conda create -n testenv -y python numpy pandas
$ du -h -s $(conda info --base)/envs/testenv
1.2G /opt/miniconda/envs/testenv
挖掘 conda-meta
实现此目的的一种方法是在环境的 conda-meta/
目录中为每个包挖掘 JSON 元数据文件。列出了两种尺寸:
- 大小 - 压缩包的总压缩包大小
- size_in_bytes - 一个包内的单个解压缩文件大小
既然您似乎对包裹的总大小感兴趣,那么让我们做更简单的 size。这将使我们能够根据下载大小快速获得包的排名。
命令
## activate the environment of interest
conda activate foo
## search all the JSONs for '"size":'
grep '"size":' ${CONDA_PREFIX}/conda-meta/*.json |\
## sort result
sort -k3rn |\
## show only filename
sed 's/.*conda-meta\///g' |\
## print with columns
column -t
示例输出
jaxlib-0.1.67-py39h6e9494a_0.json: "size": 38576847,
scipy-1.6.3-py39h056f1c0_0.json: "size": 19495906,
python-3.9.4-h9133fd0_0_cpython.json: "size": 13160553,
libopenblas-0.3.15-openmp_h5e1b9a4_1.json: "size": 9163719,
numpy-1.20.3-py39h7eed0ac_1.json: "size": 5732039,
tk-8.6.10-hb0a8c7a_1.json: "size": 3420669,
openssl-1.1.1k-h0d85af4_0.json: "size": 1985060,
sqlite-3.35.5-h44b9ce1_0.json: "size": 1810221,
libgfortran5-9.3.0-h6c81a4c_22.json: "size": 1766473,
pip-21.1.2-pyhd8ed1ab_0.json: "size": 1147500,
libcxx-11.1.0-habf9029_0.json: "size": 1055976,
setuptools-49.6.0-py39h6e9494a_3.json: "size": 972968,
ncurses-6.2-h2e338ed_4.json: "size": 901840,
jax-0.2.14-pyhd8ed1ab_0.json: "size": 571585,
llvm-openmp-11.1.0-hda6cdc1_1.json: "size": 274368,
readline-8.1-h05e3726_0.json: "size": 272444,
xz-5.2.5-haf1e3a3_1.json: "size": 233058,
certifi-2021.5.30-py39h6e9494a_0.json: "size": 144599,
ca-certificates-2021.5.30-h033912b_0.json: "size": 139088,
tzdata-2021a-he74cb21_0.json: "size": 123802,
zlib-1.2.11-h7795811_1010.json: "size": 104180,
absl-py-0.12.0-pyhd8ed1ab_0.json: "size": 98565,
tqdm-4.61.0-pyhd8ed1ab_0.json: "size": 81513,
opt_einsum-3.3.0-pyhd8ed1ab_1.json: "size": 54494,
libffi-3.3-h046ec9c_2.json: "size": 46425,
wheel-0.36.2-pyhd3deb0d_0.json: "size": 31381,
python-flatbuffers-2.0-pyhd8ed1ab_0.json: "size": 28606,
libgfortran-5.0.0-9_3_0_h6c81a4c_22.json: "size": 19280,
six-1.16.0-pyh6c4a22f_0.json: "size": 14259,
libblas-3.9.0-9_openblas.json: "size": 11762,
libcblas-3.9.0-9_openblas.json: "size": 11671,
liblapack-3.9.0-9_openblas.json: "size": 11671,
python_abi-3.9-1_cp39.json: "size": 3921,
上面的输出显示 jaxlib
是最大的包,其次是 scipy
,然后是 python
解释器本身。在这种情况下,如果我想删除 jaxlib
还需要删除 jax
.
备注
我认为以上内容可作为按大小对包裹进行排名的初步近似值。 size_in_bytes
可能更准确,但为了彻底,还需要考虑哪些单独的文件是硬链接的,因为这些文件实际上不应该计入每个环境 的包中 水平。对于他们来说,每个系统只有一个副本,并且可以跨环境重复使用。
您可以通过subprocess
通讯使用pip
模块(Python >= 3.7):
from pip._internal.commands.show import search_packages_info
import subprocess
import sys
import json
import pathlib
import math
import operator
TMPL = '{:<30} {:<30} {:<10} {:>9}'
def humanize(size):
"""Convert size in bytes to human readable output."""
try:
units = ['B', 'KB', 'MB', 'GB']
i = math.floor(math.log(size) / math.log(1024))
hsize = f"{round(size / 1024**i)}{units[i]}"
except ValueError:
hsize = '0B'
return hsize
def pip_list_ext():
"""List installed packages with additional information."""
# python -m pip list --format --json --verbose
pip_list = subprocess.run([sys.executable, '-m', 'pip', 'list',
'--format', 'json', '--verbose'],
capture_output=True)
if pip_list.returncode != 0:
raise RuntimeError('...')
query = [pkg['name'] for pkg in json.loads(pip_list.stdout)]
packages = []
for pkg in search_packages_info(query):
location = pathlib.Path(pkg['location'])
pkg['installer'] = pkg.get('installer', '')
pkg['files'] = pkg.get('files', [])
size = sum((location / f).stat().st_size
for f in pkg['files'] if (location / f).is_file())
pkg['size'] = size
packages.append(pkg)
return packages
if __name__ == '__main__':
packages = pip_list_ext()
print(TMPL.format('Package', 'Version', 'Installer', 'Size'))
print(TMPL.format('-'*30, '-'*30, '-'*10, '-'*9))
for pkg in packages:
print(TMPL.format(pkg['name'], pkg['version'],
pkg['installer'], humanize(pkg['size'])))
# TOP 10
N = 10
pkgs = sorted(packages, key=operator.itemgetter('size'), reverse=True)
print(f"\nTOP {N}:")
for i, pkg in enumerate(pkgs[:N], 1):
print(f"{i:>2}. {pkg['name']} ({humanize(pkg['size'])})")
示例输出
Package Version Installer Size
------------------------------ ------------------------------ ---------- ---------
appnope 0.1.2 conda 13KB
backcall 0.2.0 conda 58KB
certifi 2021.5.30 261KB
cffi 1.14.5 conda 780KB
cryptography 3.4.7 conda 2MB
decorator 5.0.9 conda 35KB
ipython 7.22.0 conda 4MB
ipython-genutils 0.2.0 conda 66KB
jedi 0.17.2 conda 5MB
mkl-fft 1.3.0 0B
mkl-random 1.2.1 conda 1MB
mkl-service 2.3.0 0B
numpy 1.20.2 conda 23MB
pandas 1.2.4 27MB
parso 0.7.0 conda 320KB
pexpect 4.8.0 conda 177KB
pickleshare 0.7.5 conda 23KB
pip 21.1.2 0B
prompt-toolkit 3.0.17 conda 2MB
ptyprocess 0.7.0 conda 40KB
pycparser 2.20 conda 547KB
Pygments 2.9.0 conda 6MB
pyOpenSSL 20.0.1 conda 212KB
python-dateutil 2.8.1 conda 619KB
pytz 2021.1 conda 971KB
setuptools 52.0.0.post20210125 0B
six 1.15.0 conda 63KB
traitlets 5.0.5 conda 798KB
wcwidth 0.2.5 conda 411KB
wheel 0.36.2 0B
TOP 10:
1. pandas (27MB)
2. numpy (23MB)
3. Pygments (6MB)
4. jedi (5MB)
5. ipython (4MB)
6. cryptography (2MB)
7. prompt-toolkit (2MB)
8. mkl-random (1MB)
9. pytz (971KB)
10. traitlets (798KB)
此解决方案适用于 Windows10。
安装 Windows SysInternals 以便您拥有命令实用程序 du
。
运行 du
命令在 Anaconda 中找出 site-packages
下的包大小并将结果存储在 csv 文件中。
$ du -c -v Lib/site-packages/ > packages.csv
使用 Excel 打开 packages.csv
。按降序对包装尺寸列进行排序。现在,您已经获得了最大包裹尺寸的包裹信息。
想知道conda包的大小,删掉大的和很少用的。我应该使用哪个 conda 命令来找出包的大小?
conda list
将列出包裹但不显示包裹大小。
我欢迎使用其他方法来确定包裹大小。
我正在使用 Windows10.
如果您担心用完磁盘 space,您可以 运行 此命令清理 conda 用于设置您的环境的所有临时包、zip 文件等。
conda clean --all
这些文件会保留下来,并且随着时间的推移会使您的磁盘变得混乱。
使用
du -h -s $(conda info --base)/envs/test-1
为包的文件大小
du tool
可以告诉您特定目录占用了多少磁盘 space。
例如,创建一个相同的 conda 环境 (Miniconda) 并检查其磁盘使用情况,如下所示:
$ conda create -n testenv -y python numpy pandas
$ du -h -s $(conda info --base)/envs/testenv
1.2G /opt/miniconda/envs/testenv
挖掘 conda-meta
实现此目的的一种方法是在环境的 conda-meta/
目录中为每个包挖掘 JSON 元数据文件。列出了两种尺寸:
- 大小 - 压缩包的总压缩包大小
- size_in_bytes - 一个包内的单个解压缩文件大小
既然您似乎对包裹的总大小感兴趣,那么让我们做更简单的 size。这将使我们能够根据下载大小快速获得包的排名。
命令
## activate the environment of interest
conda activate foo
## search all the JSONs for '"size":'
grep '"size":' ${CONDA_PREFIX}/conda-meta/*.json |\
## sort result
sort -k3rn |\
## show only filename
sed 's/.*conda-meta\///g' |\
## print with columns
column -t
示例输出
jaxlib-0.1.67-py39h6e9494a_0.json: "size": 38576847,
scipy-1.6.3-py39h056f1c0_0.json: "size": 19495906,
python-3.9.4-h9133fd0_0_cpython.json: "size": 13160553,
libopenblas-0.3.15-openmp_h5e1b9a4_1.json: "size": 9163719,
numpy-1.20.3-py39h7eed0ac_1.json: "size": 5732039,
tk-8.6.10-hb0a8c7a_1.json: "size": 3420669,
openssl-1.1.1k-h0d85af4_0.json: "size": 1985060,
sqlite-3.35.5-h44b9ce1_0.json: "size": 1810221,
libgfortran5-9.3.0-h6c81a4c_22.json: "size": 1766473,
pip-21.1.2-pyhd8ed1ab_0.json: "size": 1147500,
libcxx-11.1.0-habf9029_0.json: "size": 1055976,
setuptools-49.6.0-py39h6e9494a_3.json: "size": 972968,
ncurses-6.2-h2e338ed_4.json: "size": 901840,
jax-0.2.14-pyhd8ed1ab_0.json: "size": 571585,
llvm-openmp-11.1.0-hda6cdc1_1.json: "size": 274368,
readline-8.1-h05e3726_0.json: "size": 272444,
xz-5.2.5-haf1e3a3_1.json: "size": 233058,
certifi-2021.5.30-py39h6e9494a_0.json: "size": 144599,
ca-certificates-2021.5.30-h033912b_0.json: "size": 139088,
tzdata-2021a-he74cb21_0.json: "size": 123802,
zlib-1.2.11-h7795811_1010.json: "size": 104180,
absl-py-0.12.0-pyhd8ed1ab_0.json: "size": 98565,
tqdm-4.61.0-pyhd8ed1ab_0.json: "size": 81513,
opt_einsum-3.3.0-pyhd8ed1ab_1.json: "size": 54494,
libffi-3.3-h046ec9c_2.json: "size": 46425,
wheel-0.36.2-pyhd3deb0d_0.json: "size": 31381,
python-flatbuffers-2.0-pyhd8ed1ab_0.json: "size": 28606,
libgfortran-5.0.0-9_3_0_h6c81a4c_22.json: "size": 19280,
six-1.16.0-pyh6c4a22f_0.json: "size": 14259,
libblas-3.9.0-9_openblas.json: "size": 11762,
libcblas-3.9.0-9_openblas.json: "size": 11671,
liblapack-3.9.0-9_openblas.json: "size": 11671,
python_abi-3.9-1_cp39.json: "size": 3921,
上面的输出显示 jaxlib
是最大的包,其次是 scipy
,然后是 python
解释器本身。在这种情况下,如果我想删除 jaxlib
还需要删除 jax
.
备注
我认为以上内容可作为按大小对包裹进行排名的初步近似值。 size_in_bytes
可能更准确,但为了彻底,还需要考虑哪些单独的文件是硬链接的,因为这些文件实际上不应该计入每个环境 的包中 水平。对于他们来说,每个系统只有一个副本,并且可以跨环境重复使用。
您可以通过subprocess
通讯使用pip
模块(Python >= 3.7):
from pip._internal.commands.show import search_packages_info
import subprocess
import sys
import json
import pathlib
import math
import operator
TMPL = '{:<30} {:<30} {:<10} {:>9}'
def humanize(size):
"""Convert size in bytes to human readable output."""
try:
units = ['B', 'KB', 'MB', 'GB']
i = math.floor(math.log(size) / math.log(1024))
hsize = f"{round(size / 1024**i)}{units[i]}"
except ValueError:
hsize = '0B'
return hsize
def pip_list_ext():
"""List installed packages with additional information."""
# python -m pip list --format --json --verbose
pip_list = subprocess.run([sys.executable, '-m', 'pip', 'list',
'--format', 'json', '--verbose'],
capture_output=True)
if pip_list.returncode != 0:
raise RuntimeError('...')
query = [pkg['name'] for pkg in json.loads(pip_list.stdout)]
packages = []
for pkg in search_packages_info(query):
location = pathlib.Path(pkg['location'])
pkg['installer'] = pkg.get('installer', '')
pkg['files'] = pkg.get('files', [])
size = sum((location / f).stat().st_size
for f in pkg['files'] if (location / f).is_file())
pkg['size'] = size
packages.append(pkg)
return packages
if __name__ == '__main__':
packages = pip_list_ext()
print(TMPL.format('Package', 'Version', 'Installer', 'Size'))
print(TMPL.format('-'*30, '-'*30, '-'*10, '-'*9))
for pkg in packages:
print(TMPL.format(pkg['name'], pkg['version'],
pkg['installer'], humanize(pkg['size'])))
# TOP 10
N = 10
pkgs = sorted(packages, key=operator.itemgetter('size'), reverse=True)
print(f"\nTOP {N}:")
for i, pkg in enumerate(pkgs[:N], 1):
print(f"{i:>2}. {pkg['name']} ({humanize(pkg['size'])})")
示例输出
Package Version Installer Size
------------------------------ ------------------------------ ---------- ---------
appnope 0.1.2 conda 13KB
backcall 0.2.0 conda 58KB
certifi 2021.5.30 261KB
cffi 1.14.5 conda 780KB
cryptography 3.4.7 conda 2MB
decorator 5.0.9 conda 35KB
ipython 7.22.0 conda 4MB
ipython-genutils 0.2.0 conda 66KB
jedi 0.17.2 conda 5MB
mkl-fft 1.3.0 0B
mkl-random 1.2.1 conda 1MB
mkl-service 2.3.0 0B
numpy 1.20.2 conda 23MB
pandas 1.2.4 27MB
parso 0.7.0 conda 320KB
pexpect 4.8.0 conda 177KB
pickleshare 0.7.5 conda 23KB
pip 21.1.2 0B
prompt-toolkit 3.0.17 conda 2MB
ptyprocess 0.7.0 conda 40KB
pycparser 2.20 conda 547KB
Pygments 2.9.0 conda 6MB
pyOpenSSL 20.0.1 conda 212KB
python-dateutil 2.8.1 conda 619KB
pytz 2021.1 conda 971KB
setuptools 52.0.0.post20210125 0B
six 1.15.0 conda 63KB
traitlets 5.0.5 conda 798KB
wcwidth 0.2.5 conda 411KB
wheel 0.36.2 0B
TOP 10:
1. pandas (27MB)
2. numpy (23MB)
3. Pygments (6MB)
4. jedi (5MB)
5. ipython (4MB)
6. cryptography (2MB)
7. prompt-toolkit (2MB)
8. mkl-random (1MB)
9. pytz (971KB)
10. traitlets (798KB)
此解决方案适用于 Windows10。
安装 Windows SysInternals 以便您拥有命令实用程序 du
。
运行 du
命令在 Anaconda 中找出 site-packages
下的包大小并将结果存储在 csv 文件中。
$ du -c -v Lib/site-packages/ > packages.csv
使用 Excel 打开 packages.csv
。按降序对包装尺寸列进行排序。现在,您已经获得了最大包裹尺寸的包裹信息。