减少 python 虚拟环境大小的可能性有哪些?

What are the possibilities in order to reduce the size of a python virtual environment?

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

这可能是:

还有什么可以删除或精简的?或者还有其他方法吗?

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

如果有 .pyc 文件,您 可以 删除 .py 文件,请注意您会丢失这些文件的堆栈跟踪信息,这很可能会弄乱您拥有的任何 error/exception 日志记录。

除此之外,没有减少 virtualenv 大小的通用方法 - 这将高度依赖于您安装的软件包,您很可能不得不求助于反复试验或阅读源代码以弄清楚你可以删除什么。

您最好的办法是查找占用最多 space 的软件包,然后进一步调查占用最多磁盘 space 的软件包。在具有可用标准 coreutil 命令的 *nix 系统上,您可以 运行 以下命令:

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

当您创建 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 中,你安装了一个包,它将被用来代替系统上的任何东西。

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

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

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