2

Python で次の構築を行おうとすると"No module named foo" 、2 行目に

import my_package.my_very_long_module_name as foo
from foo import f1, f2, f3
from foo import a, b, c
from foo import x, y, z

my_very_long_module_nameフォルダ内のモジュール(my_very_long_module_name.py)です(my_packageフォルダにはファイルがあります__init__.py)。

上記の 2 行目が失敗するのはなぜですか? エイリアス化されたモジュールから名前をインポートすることはできませんか?

その構造が Python で合法でない場合、これを行う他の方法はありますか? (

4

3 に答える 3

4
import my_package.my_very_long_module_name as foo
from foo import f1, f2, f3

python はモジュール名を見つけようとするため、2 行目は失敗します。インポートしたばかりfoo.pyの変数は使用されません。foo

次のようなことを試すことができます:

import my_package.my_very_long_module_name as foo
f1, f2, f3 = foo.f1, foo.f2, foo.f3
del foo
于 2013-08-13T17:57:54.230 に答える
1

import ステートメントで変数を使用できないのは正しいことですが、モジュールの変数に簡単にアクセスできます。

したがって、次のことができます。

a = foo.a

そして、あなたがglobals主張するなら、あなたは手紙を書くことさえできます. ただし、正直なところ、コードで修飾foo.aされたものを使用することをお勧めします。より読みやすくなります。

于 2013-08-13T18:35:18.823 に答える
1

あなたが達成しようとしていることは、sys.modules ディクショナリを変更することで実行できます。

import sys
import my_package.my_very_long_module_name as foo

sys.modules['foo'] = foo
from foo import f1, f2, f3
from foo import a, b, c
from foo import x, y, z


警告: これを行うfooと、この python セッションに対してグローバルに登録されるため、これを試みる他のモジュールimport fooは、my_package.my_very_long_module_name

あなたの特定のケースでは、グローバルな影響があるため、これはおそらく悪い方法です。ただし、これは、グローバルな名前変更が必要な場合に役立ちます。

于 2013-12-16T03:55:52.180 に答える