【问题标题】:What are the possibilities in order to reduce the size of a python virtual environment?为了减小 python 虚拟环境的大小,有哪些可能性?
【发布时间】:2019-07-09 14:14:45
【问题描述】:

如何减小 python 虚拟环境的大小?

这可能是:

还有什么可以删除或剥离的?还是有其他方法?

用例是将virtualenv 上传到空间有限的服务器(例如AWS Lambda 函数,限制为 512 MB)

【问题讨论】:

  • 事实上不使用一个包并不意味着它没有被你的另一个包使用......至于检测陈旧的包,你可能想要看看 pipdeptree (pypi.org/project/pipdeptree)
  • 如果你想接收 Lambda 包 zip,你可以使用 AWS Lambda 层。 AWS Lambda 层 您可以配置您的 Lambda 函数,以层的形式引入额外的代码和内容。层是包含库、自定义运行时或其他依赖项的 ZIP 存档。使用层,您可以在函数中使用库,而无需将它们包含在部署包中。层可以让您的部署包保持较小,从而使开发更容易。您可以避免在使用函数代码安装和打包依赖项时可能发生的错误。
  • 您是否从您的 zip 中删除了 boto3、botocore 等?它们已经在 AWS Lambdas 中可用。
  • @giaco 我们正在使用 spacy,它与 mlflow、scikit-learn 等结合使用非常大。在 Spacy 中,可能可以删除大约 240 MB 的“lang”,但这会很好知道哪些是进一步的可能性。
  • @ReneB 这是一个关于减少包空间使用的很酷的博客:towardsdatascience.com/…

标签: python aws-lambda virtualenv


【解决方案1】:

如果有 .pyc 文件,您可以删除 .py 文件,请注意您将丢失这些文件中的堆栈跟踪信息,这很可能会导致任何错误/您拥有的异常日志记录。

除此之外,没有通用的方法来减小 virtualenv 的大小 - 它高度依赖于您安装的软件包,您很可能不得不通过反复试验或阅读源代码来弄清楚正是您可以删除的内容。

您可以做的最好的事情是寻找占用最多空间的软件包,然后进一步调查那些占用最多磁盘空间的软件包。在具有可用标准 coreutil 命令的 *nix 系统上,您可以运行以下命令:

du -ha /path/to/virtualenv | sort -h | tail -20

【讨论】:

    【解决方案2】:

    安装完所有包后,您可以尝试删除virutalenv中与安装包相关的所有包。

    rm -r pip*
    rm -r pkg_resources*
    rm -r setuptools*
    

    根据您安装的软件包,结果可能仍会按预期工作,因为大多数软件包不会对这三个软件包有运行时依赖项。使用风险自负。

    【讨论】:

      【解决方案3】:

      当你创建你的 virtualenv 时,你可以告诉它使用你的系统site_packages。如果你在系统上全局安装了所有需要的包,那么当你创建你的 virtualenv 时,它基本上是空的。

      $ pip install package1 package2 ...
      $ virtualenv --system-site-packages venv
      $ source venv/bin/activate
      (venv) $ # now you can use package1, package2, ...
      

      使用此方法,您可以过度安装一个包。如果在你的 virtualenv 中安装了一个包,它将被使用而不是系统上的任何东西。

      【讨论】:

      • 这意味着“将包外包给系统。但是,我需要将 virtualenv 重新定位到另一个可能没有安装包并且没有 root 权限可用的系统。
      • 将 virtualenv 重新定位到另一个系统无论如何都行不通,因为 virtualenvs 包含系统特定的路径。
      • virtualenv --relocatable my-venv重新定位一个virtualenv没有问题。我做了很多次。在这里查看:stackoverflow.com/questions/32407365/can-i-move-a-virtualenv
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 2021-04-14
      • 2019-09-24
      相关资源
      最近更新 更多