のドキュメントを読んだ場合__import__
:
name 変数が の形式の場合、通常、 name で指定されたモジュールではなくpackage.module
、最上位パッケージ (最初のドットまでの名前) が返されます。ただし、空でない fromlist 引数が指定された場合は、名前で指定されたモジュールが返されます。
そして、これは非常に簡単にわかります。
MyModule/mymodule.py:
current_module = __import__(__name__)
print current_module
プログラムは次のように出力します。
<module 'MyModule' from '/Users/abarnert/src/test/pkgtest3/MyModule/__init__.pyc'>
Python 2.7 を使用している場合は、この部分まで残りのドキュメントをざっと読むことができます。
モジュール (パッケージ内の可能性がある) を名前でインポートするだけの場合は、importlib.import_module()
.
だから、それをしてください:
import importlib
current_module = importlib.import_module(__name__)
setattr(current_module, 'VarA', 5)
以前の 2.x バージョンで作業する必要がある場合は、セクション全体をお読みください (上記でリンクした 2.7 ではなく、お使いの Python バージョンについて)。正しい答えはもう少し複雑で、少しハックです:
import sys
current_package = importlib.import_module(__name__)
current_module = sys.modules[__name__]
setattr(current_module, 'VarA', 5)
もちろん、MyModule/mymodule.py をトップレベル スクリプトとして実行execfile
したり、カスタム インポート ロジックを使用したりしないのであれば、そもそもこの複雑さは必要ありません。誰かがすでにimport
あなたを編集しているに違いないので、次のようにしてください。
import sys
current_module = sys.modules[__name__]
setattr(current_module, 'VarA', 5)
もちろん、ここでの最も簡単な解決策は次のとおりです。
変数 = 5
…しかし、実際のコードでは機能しない正当な理由があると思われます。