2017-06-23 3 views
6

zipimportモジュールは標準インポートで自動的に使用され、.zip sys.path要素を処理します。python 'import'をzip以外の他のアーカイブタイプに拡張できますか?

フックを追加して他のファイルタイプをサポートすることはできますか?例えば.tar.gzのハンドラ? sys.pathが/path/to/archive.tar.gzまたは/path/to/archive.xyzハンドラが含まれている場合

ので、例えば、.tar.gzまたは.xyzファイルを開いて読み取るために提供することができます。

答えて

1

はい、これを行うための2つの方法があります。

  1. 独自のカスタム実装で__builtin__.__import__()機能を上書きします。これは、importキーワードの機能を完全に無効にする低レベルの方法であり、一般的な使用には推奨されません。
  2. finderオブジェクトを目的の機能を実装するsys.meta_pathに追加するか、またはそのようなファインダをsys.path_hooksに返す呼び出し可能オブジェクトを追加します。ファインダーはPython 2よりもPython 3で実装する方が簡単です。なぜなら、3.xはimportlibに多くのビルディングブロックを提供するからです。しかし、Python 2でも実装できます(コードを書くだけです)。

一般に、(2)は、2.xと3.xに関係なく、(1)よりはるかに簡単です。 (1)は最後の手段としてのみ推奨されます。 (2)の詳細については、PEP 302を参照してください。

関連する問題