私のプログラムにファイルを渡し、そこから関数を取得したいと思います。モジュールのないソースファイルをロードする
は例えば、私は私のシステム上の任意の場所にすることができ、場所を実行時まで知られていないのですファイル、foo.py
を、持っているし、次のようになります。
def bar():
return "foobar"
は、どのように私は実行するために私のコードを取得することができます機能bar
?
場所が、私はこれを行うことができ、実行時前に知られていた場合:
import sys
sys.path.append("path_to_foo")
import foo
foo.bar()
私はfoo.py
であり、importlib
またはimp
を使用しますが、それは厄介なようだフォルダ内のinit.py
ファイルを作成することができます。 1あなたとの関数をオーバーライド、実行時に
def bar():
pass
実際:私はあなたがダミーの関数を記述し、チェックをバイパスするために、あなたが必要とするどこにでもそれを呼び出すことができますImportError: Import by filename is not supported.
"私は[...]は' importlib' [...]を使うことができましたが、それは面倒です。 "あなたは面倒な問題があるときは、面倒なソリューションに頼らなければなりません。 importlibで十分ではないのはなぜですか? –
また、 '__init __。py'ファイルはまったく必要ありません。 Py3では、より強力な 'importlib'関数は、任意のファイルをインポートする正しい方法です。以前のPythonでは 'foo.py'を含むフォルダを' sys.path'に追加して、特別なインポート関数を使わずに 'import foo'を実行するだけでした。 – ShadowRanger
foo.pyはファイルと同じディレクトリにありますか? – NoOneIsHere