[解決済み] imp.load_sourceメソッドの第一引数は何をするのでしょうか?
質問
今読んでいる本 これ SOの質問で、絶対パスからモジュールをインポートすることについて。回答は、以下のコードを使用することを示唆している。
import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()
以下のような構造を持つディレクトリからファイルをインポートしたい(パッケージです)。
__int__.py
model_params.py
こんなことをしました。
import01 = imp.load_source('module.name', '/home/wakatana/experiments/model_params/model_params.py')
これで
model_params.py
を経由して
import01.VARIABLE_NAME
. と同等と思われます。
import numpy as np
. ここで
model_params.py
は次のようなものです。
numpy
と
import01
は
np
.
の第1引数は何を意味しているのか、お聞きしたいです。
load_source
メソッドは何をするのですか?
help(imp)
については、実質的に何も言っていません。
load_source
メソッドで、例えば次のような
help(imp.load_source)
を返す
load_source(...)
ありがとうございます。
behzad.nouriのコメントに基づいて編集しています。
のドキュメントページで ロードソース とある。
name 引数は、モジュール・オブジェクトの作成またはアクセスに使用されます。
しかし、私がアクセスしようとすると
module.name
モジュールが定義されていないというエラーが出ます。また、なぜ
help
どうにかしてインストールできないでしょうか?私はpythonでドキュメントがコード自体の一部であることを期待していたのですが、組み込みではなく、オンラインで持っているのが一般的なのでしょうか?
解決方法は?
その 公式ドキュメント には、もう少し詳しい情報があります。
基本的に、モジュールを読み込んだ名前は、そのモジュールをインポートする他のファイルでも使用されます。たとえ
module.name
モジュールが Python パスのどこにも存在しない場合、あるモジュールをロードしてその名前を付けると、他のモジュールが通常の
import
という名前であれば、エラーは発生せず、期待通りに動作します。小さな例で説明するとわかりやすいかもしれません。
/tmp/test/foo.py
value = 1337
/tmp/test/bar.py
from foo.bar import value
def print_val():
print value
/tmp/test/run.py
import imp
foo = imp.load_source('foo.bar', '/tmp/test/foo.py')
import bar
bar.print_val()
予想通り、次のようになります。
1337
が画面に出力されます。もし、その名前が
foo.bar
でインポートに失敗していたでしょう。
bar.py
そのようなモジュールは実際には存在しないからです。
この方法は、サードパーティーモジュール内のインポートを上書きしてしまうため、実際にはモンキーパッチに使用することができます。
関連
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PicgoのイメージベッドツールをPythonで実装する
-
PythonはWordの読み書きの変更操作を実装している
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] フルパスでモジュールをインポートするには?