potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

Python 3.11でパッケージのグローバル変数やインポートを隠す

パッケージで使いまわしたいグローバル変数やインポートは__init__.pyと別ファイルの組み合わせで隠せます(見えにくくできます)。具体的には次の手順です。

  1. パッケージ名のディレクトリと__init__.pyを作成する。
  2. グローバル変数やインポートを使いたいスコープをfile1.pyなどに移動する。
  3. __init__.pyで公開したいオブジェクトだけfile1.pyなどからimportする。

上記の手順でパッケージ外からimport パッケージ名したときに__init__.py以外のファイルで使っているグローバル変数やインポートが非表示になります。厳密にはimport パッケージ名.file1で表示されますが、そこは使用者の使い方次第です。変数名やインポートエイリアス先頭の_で内部使用を示す方法も組み合わせられます。

この方法はcomtypesパッケージで知りました。このパッケージにはcomtypes.GUIDクラス(__init__.pyimportされたcomtypes.GUID.GUIDの別名)とcomtypes.GUIDファイルが存在していて、comtypes.GUIDファイルのグローバル変数_CLSIDFromString__init__.pyimportしないことで隠されています。