【问题标题】:Can I zip all the python standard libs and the python still able to import it?我可以压缩所有 python 标准库并且 python 仍然可以导入它吗?
【发布时间】:2018-04-08 17:03:21
【问题描述】:

我阅读了一个教程,您可以将所有 libs 文件编译为 .pyc,然后将所有 .pyc 打包为压缩文件。然后蟒蛇仍然像魔术一样工作,它变得明显更小。 但是当我将所有 .pyc 文件压缩为 python36.zip 并将它们保存在 /lib/python3.6 下时。尝试启动python,python说找不到模块编解码器。

我做错了什么?有人能解释一下这真的有用吗?

【问题讨论】:

标签: python


【解决方案1】:

要从.zip 文件中导入模块,you need to add that file to sys.path - 然后它将充当搜索目录。完成这项工作的 zipimport 模块是一个内置模块。


sys.path 是这样构造的:


因此,您可以将所有标准模块移动到预定义的.zip 文件中。但是你可能需要留下一个os.pylib-dynload 如果sys.prefixsys.exec_prefix 之后变成空白(内容无关,移动的模块将从.zip 导入,因为它更早于sys.path ),否则您将无法访问所有第 3 方模块。

sys.path 中有自己的条目的子目录需要单独处理,以便它们的内容仍然可以在sys.path 上找到。

(在 Python 2.7-win32 中测试)


虽然将.pyc 文件添加到存档中就足够了,但pdb 和堆栈跟踪将毫无用处,除非您也将.pys 放在那里。

【讨论】:

  • 我检查了 sys.path 变量并将所有内容压缩为 python36,它就像魅力一样工作。我必须离开的唯一目录是 lib-dyload。原因 python 从此文件夹中调用动态库。看来这是我唯一不能压缩的东西。
  • @J.R.你不能压缩libpythonX.Y.so,因为它是 Python 引擎。 .so files that are Python extension modules, you should be able to。请注意,它们仍然可以在 sys.path 上以相同的模块名称找到。目录条目本身在sys.exec_prefix 搜索中进行了测试(更新了答案),因此您可能需要保留它。
猜你喜欢
  • 2014-08-03
  • 2020-06-20
  • 1970-01-01
  • 2018-06-04
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
相关资源
最近更新 更多