Python 从大型模块(如numpy、pandas)中自动删除未使用的代码

Python 从大型模块(如numpy、pandas)中自动删除未使用的代码,python,amazon-web-services,numpy,optimization,lambda,Python,Amazon Web Services,Numpy,Optimization,Lambda,我正在为我公司的开发人员创建一个工具,它将接受一个python项目,使用virtualenv的site packages中所需的模块进行压缩,并在AWS Lambda函数中运行代码。我需要这样做,因为Lambda没有第三方模块,也不允许您使用pip进行安装,所以我必须自己带上它们。问题是代码总量也有250mb的限制,如果我有numpy+pandas,那已经超过了限制。然而,开发人员并没有使用这些模块的几乎全部功能,因此实际使用的代码量相比之下很小。我希望能够根据开发人员的项目使用情况,至少去掉一

我正在为我公司的开发人员创建一个工具,它将接受一个python项目,使用
virtualenv
site packages
中所需的模块进行压缩,并在AWS Lambda函数中运行代码。我需要这样做,因为Lambda没有第三方模块,也不允许您使用
pip
进行安装,所以我必须自己带上它们。问题是代码总量也有250mb的限制,如果我有
numpy
+
pandas
,那已经超过了限制。然而,开发人员并没有使用这些模块的几乎全部功能,因此实际使用的代码量相比之下很小。我希望能够根据开发人员的项目使用情况,至少去掉一些未使用的代码,或者至少给我足够的信息,让我可以编写一个脚本来自动删除死代码。这是否存在,或者至少部分实现了?

您可以尝试一下,看起来它可以将大小减少一半左右。它支持模糊代码,压缩您的项目,并且它看起来有一个分析器来查找和排除未使用的导入


编辑:链接到我答案中的文档,GitHub repo。

这个工具应该如何处理numpy的编译部分,包括链接库?我现在要做的是在EC2服务器上的
virtualenv
中安装这些模块(包括构建C扩展),它的操作系统和硬件与Lambda服务器几乎相同,然后将它们全部从
站点包中移出。这对于仅使用
numpy
模块有效。即使该工具可以收缩.py文件并移动其他文件,这也是一个巨大的好处。只要快速浏览一下
numpy
sitepackages
目录,我建议省略或清除标记为
tests
的目录。还要确保您没有同时拥有
py
pyc
文件。一些目录,如
ma
fft
可能会被删除。但是大多数其他的
numpy
是相互关联的<另一方面,如果使用code>scipy
,则它由独立的包组成,并且可以逐段使用。对于依赖项为numpy、scipy和pandas的代码,我们已经解决了这个问题。下面是我们如何遵循它的。这很好,但似乎我缩小整个模块的唯一方法是使用
.pyz
扩展,但我需要Lambda的原始
.py
。@nicolashahn我知道这是一个老问题,但你能找到一个解决方案来减少AWS Lambda层的代码大小吗?我真的不记得,这是3个工作之前的事了。很抱歉