【问题标题】:Remove unused code automatically from large modules like numpy, pandas自动从 numpy、pandas 等大型模块中删除未使用的代码
【发布时间】:2016-05-10 14:01:28
【问题描述】:

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

【问题讨论】:

  • 这个工具应该如何处理 numpy 的编译部分,包括链接库?
  • 好吧,我现在正在做的是将这些模块(包括构建 C 扩展)安装在 EC2 服务器上的 virtualenv 中,该服务器具有与 Lambda 服务器几乎相同的操作系统和硬件,然后只需将它们全部从site-packages 移出。这适用于单独使用 numpy 模块。即使该工具可以缩小 .py 文件并移动所有其他文件,这也是一个巨大的好处。
  • 快速浏览numpy sitepackages 目录,我建议省略或清除标有tests 的目录。还要确保您没有 pypyc 文件。像mafft 这样的一些目录可能会消失。但是大多数其他numpy 都太相互关联了。 scipy,另一方面,如果使用的话,是由独立的包组成的,可以分段使用。
  • 我们已经解决了一个依赖 numpy、scipy 和 pandas 的代码的这个问题。这是我们遵循它的方式。 stackoverflow.com/questions/34749806/…

标签: python amazon-web-services numpy optimization lambda


【解决方案1】:

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

编辑:链接到我的答案中的文档,here's GitHub 存储库。

【讨论】:

  • 这很好,但似乎我可以缩小整个模块的唯一方法是使用 .pyz 扩展,但我需要原始 .py 用于 Lambda。
  • @nicolashahn 我知道这是一个老问题,但是您是否能够找到一种解决方案来减少 AWS lambda 层的代码大小?
  • 老实说,我什至不记得了,这是 3 份工作之前的事。对不起。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 2012-08-18
相关资源
最近更新 更多