2017-03-07 22 views
2

ファイル./model_scripts/medians.pyには、関数predict_volume()が含まれています。 【下記のbash端末でtreeの出力]Python:名前が変数であるファイルからのインポート関数

model_scripts 
├── __init__.py 
├── medians.py 
└── ... 

I関数はインポートされなければならないから、Pythonスクリプトの名前(すなわちmedians.py)の形態である別のPythonスクリプトにこの機能をインポートする必要があり文字列変数の私が書いたコードは次のとおりです。

model_name = 'medians' 
... 
model = getattr(__import__('model_scripts'), model_name) 
vol = model.predict_volume() 

しかし、私は最初の行で、次のエラーが表示されます。他の回答(here)を読み込むと

AttributeError: 'module' object has no attribute 'medians' 

、私はmodel_scriptsディレクトリに__init__.pyを追加しました。しかし、私はまだ上記のエラーを取得しています。

This答えはimportlibを使うことを提案:

import importlib 
model_name = 'medians' 
... 
model = importlib.import_module('model_scripts.'+model_name) 
vol = model.predict_volume() 

は最初のアプローチは動作しませんが、2番目がない理由上の任意の洞察力をお願い申し上げます。

+0

最初model_scriptsからmedians'をインポートし、第二は、2つの異なる要求されている 'インポートmodel_scripts.medians'、と等価である 'と等価です。 – cdhowie

+0

@cdhowie: 'model = getattr(__ import __( 'model_scripts')、model_name)'と入力すると、 'model = model_scripts.medians'と同じですか? – IM94

+0

する必要があります。これは 'model_scripts'が' medians'を輸出することを前提としています。 model_scriptsからmediansをインポートするのは、あなたが思うように機能しますか? – cdhowie

答えて

2

__import__の正しい構文では、fromlistが使用されています。

次の作品(hereを読み取る):

model = getattr(__import__('model_scripts', fromlist=[model_name]), model_name) 
関連する問題