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

时间:2017-06-23 15:01:12

标签: python python-2.7

标准导入会自动使用zipimport模块来处理.zip sys.path元素。

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

因此,例如,如果sys.path包含/path/to/archive.tar.gz/path/to/archive.xyz个处理程序,则可以提供这些文件来打开和阅读.tar.gz.xyz个文件。

1 个答案:

答案 0 :(得分:1)

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

  1. 使用您自己的自定义实现覆盖__builtin__.__import__()函数。这是一种完全覆盖import关键字所做内容的低级方法,不建议用于一般用途。
  2. finder对象添加到sys.meta_path,以实现所需的功能,或添加一个将此类查找器返回sys.path_hooks的可调用对象。在Python 3中比在Python 2中更容易实现Finders,因为3.x在importlib中提供了许多构建块。但是,它们也可以在Python 2中实现(您只需编写更多代码)。
  3. 一般来说,无论2.x与3.x相比,(2)都比(1)容易得多。 (1)仅作为最后手段推荐。有关(2)的更多信息,请参阅PEP 302