デフォルトの構成ファイルをロードし、ユーザーが追加の補足構成またはデフォルトのオーバーライドとして独自のPythonファイルを提供できるようにするコードがいくつかあります。
# foo.py
def load(cfg_path=None):
# load default configuration
exec(default_config)
# load user-specific configuration
if cfg_path:
execfile(cfg_path)
ただし、問題があります。によって指定されたファイルで、それ自体の作業ディレクトリではなく、の作業ディレクトリにあるかexecfile()
のようにディレクティブを実行します。したがって、ファイルが、たとえば、と同じディレクトリ内のモジュールがどこにあるかを確認すると、ディレクティブが失敗する可能性があります。cfg_path
foo.py
import
cfg_path
from m import x
m
cfg_path
execfile()
その引数の作業ディレクトリからどのようにすればよいですか、またはそうでなければ同等の結果を達成しますか?また、execfile
Python 3では非推奨であり、使用する必要があると言われているexec
ので、これを行うためのより良い方法があれば、私はすべての耳です。
注:作業ディレクトリを変更するだけの解決策は正しいとは思いません。私が知る限り、それはそれらのモジュールをインタプリタのモジュールルックアップパスに配置しません。