python 是否支持*导入* gzip 文件?

Is there support in python to *import* a gzipped file?

假设我有一个 gzipped mymodule.py.gz 我希望 python(可能有一些参数)可以导入它:

import mymodule

(我想当找不到 .py 文件时,就会查找 .py.gz。)

或者可能有特定版本的导入:

gzimport mymodule

如果可能的话,我不想解压文件。我想,我可以解压缩它(从 python 中可能到 /tmp)并正常导入它。但如果不是必须的话,我宁愿不这样做。)其他压缩格式也很有趣。

由于您提到“其他压缩格式也很有趣”:

对于 .zip 格式,这实际上是开箱即用的。您只需要将 zip 文件放在 sys.path 上(与包含可用于导入的 .py 文件的任何其他目录一样)。

$ echo 'print("hello world")' > mymodule.py
$ zip -o example.zip mymodule.py 
  adding: example.py (stored 0%)
$ rm mymodule.py 
$ python3
Python 3.10.2 (main, Feb  2 2022, 06:19:27) [Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("example.zip")
>>> import mymodule
hello world

之所以有效,是因为有一个 zipimporter 默认处于活动状态:

>>> mymodule
<module 'mymodule' from 'example.zip/mymodule.py'>
>>> mymodule.__loader__
<zipimporter object "example.zip/">

要使其适用于 .gz 格式,您可以通过向 sys.meta_path.

添加一个 gzip 导入器来相当轻松地添加支持。