【发布时间】:2019-02-12 09:38:49
【问题描述】:
我的服务器管理员将磁盘空间限制为大约 50 Mb。 linux 上的默认 gcloud 安装(带有 alpha 版本)大约需要 150 Mb。我需要减小安装大小以适应我的驱动器空间。
我尝试使用 pyinstaller (https://www.pyinstaller.org/
) 在 lib/gcloud.py 上,因为 bin/gcloud 是一个 bash 脚本。生成的可执行文件(lib/dist)不起作用。
我还尝试压缩一些库(lib/surface 和其他一些库)并将生成的 .zip 文件添加到 sys.path 中的 lib/gcloud.py。这应该允许zipimport 在节省磁盘空间的同时使用这些 zip。
虽然这种方法将大小减小到 50 Mb 以下,并且对于某些 gcloud 选项非常有效,但它不适用于 cloud-shell。
我注意到有很多.pyc 文件以及.py 文件。例如gcloud.py 和gcloud.pyc 都存在于lib/ 中。现在这似乎是一种浪费,所以我在根文件夹中运行 python -m compileall . ,然后运行 find . -iname '*.py' -delete 。这也没有奏效。但它确实将磁盘空间减少到 40 Mb 以下。
我最感兴趣的是使用gcloud alpha cloud-shell,而不是其他api。使用上述方法(附加到sys.path 的.zip 文件)会在gcloud alpha cloud-shell ssh/scp 出现此错误
ERROR: gcloud crashed (IOError): [Errno 20] Not a directory
功能齐全的 gcloud 安装目录的 zip 文件小于 20 Mb。因此,必须有一种方法可以将其容纳在 50 Mb 中。有什么想法吗?
更新:
如果您对使用 oauth2 工作流程感到满意,请参阅下面 joffre 的回答。
我个人觉得使用oauth2比较麻烦。事实上,gcloud CLI 对我来说的主要好处之一是,一旦完成gcloud init,所有的身份验证问题都会得到解决。
在我之前尝试的字节编译方法中,__init__.py 文件也被删除了。 *.json 文件似乎也不是功能所必需的(尽管它们可能有帮助字符串)
python -m compileall .
find . iname '*.py' -not -iname '__init__.py' -delete
find . -iname '*.json' -delete
这会将总安装大小降低到 40-45 Mb。
请注意,也可以执行相反的操作,即删除所有 *.pyc ,同时保留所有 *.py 。这也会减少磁盘空间,但不会减少那么多(因为大多数 *.pyc 似乎小于相应的 *.py 文件)
【问题讨论】:
-
您是否尝试过与您的服务器管理员交谈?
-
:) 。好吧,我希望这里的聪明人能帮助我找到一个避免与管理员交谈的解决方案。
标签: python python-2.7 google-cloud-platform gcloud google-cloud-shell