May the Neural Networks be with you

ニューラルネットワークと共にあらんことを

Xonshの設定を ~/.xonsh/*.py に分割して読み込む

こんにちは。shunk031です。この時期こたつに入って読む論文は最高ですよね。

この記事は Xonsh Advent Calendar 2018 17日目の記事です。

xonshの設定をする際、設定ファイルを複数に分割して読み込みたいなーと考えました。 そこでふと思ったのが「あれ?Pythonって先頭にドットがあるモジュールって読み込めるんだっけ?」という疑問です。

今回はホームディレクトリに .xonsh というドットから始まるディレクトリを作り、そこに分割した設定ファイル群をxonsh起動時に読み込む方法を調べました。

方法

まずは .xonshrc の設定例を示します。

import imp
import os
import sys

XONSH_DIR = os.path.expanduser('~/.xonsh')
sys.path.append(XONSH_DIR)

open_file, file_name, desc = imp.find_module(XONSH_DIR)
dot_xonsh = imp.load_module(XONSH_DIR, open_file, file_name, desc)

以上の方法で ~/.xonsh をモジュールとして読み込むことができます。

詳細

対象のディレクトリをPythonモジュールとしてインポートする

対象のディレクトリをPythonモジュールとしてインポートする場合は sys.pathディレクトリのパスを指定します。

import os
import sys

XONSH_DIR = os.path.expanduser('~/.xonsh')
sys.path.append(XONSH_DIR)

先頭が ドット であるディレクトリを読み込む

ディレクトリ名の先頭が ドット から始まる場合、 imp モジュールを用いて以下のように読み込みを行います。

import imp

open_file, file_name, desc = imp.find_module(XONSH_DIR)
dot_xonsh = imp.load_module(XONSH_DIR, open_file, file_name, desc)

このようにして .xonsh ディレクトリを dot_xonsh モジュールとして読み込むことができます。

まとめ

Xonshの設定を ~/.xonsh/*.py に分割して読み込む際の「ドットから始まるモジュールの読み込み」の方法についてまとめました。imp モジュールを用いたモジュールのインポートを用いることでドットから始まるモジュールも読み込むことが可能となります。