在 Python virtualenv 中查找每个编译模块的大小?

Find size of each compiled module in Python virtualenv?

我继承了一个通过Heroku部署的臃肿的Django项目,其中包含很多大型库(包括numpy,scipy等)。看起来以前的开发人员冻结了他的整个虚拟环境,我正在尽我所能修剪未使用的依赖项。

需要安装MatPlotlib后,Heroku报错slug size is too large。该库本身超过 50MB。

remote: -----> Compressing...
remote:  !     Compiled slug size: 321M is too large (max is 300M).
remote:  !     See: http://devcenter.heroku.com/articles/slug-size

为了让这个应用程序更新新功能,我想 grep 这个应用程序中每个依赖项的大小,这样我就可以制作一个优先级列表来调查哪些是实际使用的。

如何在我的 requirements.txt 文件中循环查看依赖项列表并查看每个模块的编译大小?

假设您设置了一个虚拟环境并且所有依赖项都在 site-packages 中,您只需执行以下操作即可接近:

du -sh /path/to/site-packages/* | sort -hr

这是我机器上的输出:

29M     .../site-packages/django
7.0M    .../site-packages/pip
6.5M    .../site-packages/ckeditor
6.2M    .../site-packages/grappelli
5.2M    .../site-packages/IPython
...

当然,这并没有区分你的依赖关系和你的依赖关系的依赖关系,或者考虑到.slugignore,但它可能已经足够好了。