パッケージパスをパラメータ化する方法を見つけようとしていますが、理解できませんでした。
次に例を示します。
次のようにすると__init__.py
、動作します。a 、bはディレクトリ名であり、最後のディレクトリbにはc.pyファイルが含まれています。このファイルには、abc importdのクラス名として「d」が含まれています(Pythonはそれを取得します)問題なく)
ディレクトリ「b」を動的に渡すことができる変数として作成しようとしています。
次のようなもの:b = 'y' <-この名前はabcimportdから何らかの形で動的に計算されます
上記の識別子bは文字列であり、Pythonはそれを受け取りません。文字列「y」をモジュール識別子に変換するには、eval()、lambda、getattr()などが必要なようですが、機能させることはできません。 。
誰かが私を助けてくれませんか、事前に感謝します!
ブルース
wim@wim-imac:/tmp$ find a
a
a/__init__.py
a/b
a/b/__init__.py
a/b/c
a/b/c/__init__.py
a/y
a/y/__init__.py
a/y/c
a/y/c/__init__.py
wim@wim-imac:/tmp$ cat a/b/c/__init__.py
d = 'd in b'
wim@wim-imac:/tmp$ cat a/y/c/__init__.py
d = 'd in y'
今importlib
あなたが必要なものを持っています:
wim@wim-imac:/tmp$ python -i -c ""
>>> from importlib import import_module
>>> mod_a_b_c = import_module('a.b.c')
>>> mod_a_b_c.d
'd in b'
>>> mod_a_y_c = import_module('a.y.c')
>>> mod_a_y_c.d
'd in y'
これらは便利なラッパーです。特に「from」スタイルのインポートが必要な場合は、__import__
magicメソッドを直接使用してfromlist
kwargを使用する必要があります。構文を少しドラッグしますが、それでも可能です。
>>> d = __import__('a.b.c', fromlist=['d']).d
>>> d
'd in b'
>>> d = __import__('a.y.c', fromlist=['d']).d
>>> d
'd in y'
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加