python'import'可以扩展到zip以外的其他存档类型吗?

Dav*_*nce 7 python python-2.7

zipimport标准导入会自动使用该模块来处理.zipsys.path元素.

是否可以添加钩子来支持其他文件类型?例如一个处理程序.tar.gz

例如,如果sys.path包含/path/to/archive.tar.gz或者/path/to/archive.xyz可以提供处理程序来打开和读取.tar.gz.xyz文件.

Kev*_*vin 2

是的,有两种方法可以做到这一点:

  1. __builtin__.__import__()使用您自己的自定义实现覆盖该函数。这是完全覆盖关键字功能的低级方法import,不建议一般使用。
  2. 添加一个实现所需功能的查找器对象sys.meta_path,或者添加一个将此类查找器返回到的可调用对象sys.path_hooks。查找器在 Python 3 中比在 Python 2 中更容易实现,因为 3.x 在importlib. 但是,它们也可以在 Python 2 中实现(您只需编写更多代码)。

一般来说,无论 2.x 还是 3.x,(2) 都比 (1) 容易得多。(1) 仅建议作为最后的手段。有关 (2) 的更多信息,请参阅PEP 302