0

だから私は、メインスクリプトが置かれているもののサブディレクトリであるpythonパッケージからモジュールをインポートしたい. これはディレクトリ構造です:

maindir \
  - main.py
  - modules \
    - __init__.py
    - module.py

私が奇妙だと思うのはmodule.py、単純なではインポートできないことです。なぜなら、その中の関数をimport modules.module呼び出そうとすると、が返されるからです。ただし、 を実行すると、 と同じようにすべて正常に動作します。また、が と同じディレクトリにある場合、 を呼び出すには単純なもので十分です。module.foo()main.pyNameError: name 'module' is not definedimport modules.module as modulefrom modules import modulemodule.pymain.pyimport modulemodule.foo()

さて、問題は、それはなぜですか?importスクリプトが入っているディレクトリではなく、パッケージからモジュールをインポートするのに単純なステートメントが十分でないのはなぜですか? それとも私は何か他のことを間違っていますか?私は今かなり混乱しているので、答えは本当にありがたいです...

4

2 に答える 2

2

モジュールをインポートしますが、その名前に直接アクセスできるようにしません。を実行するimport foo.barと、インポートされる名前はfooであり、barその属性としてのみアクセスできます。それが必要な場合は、その形式のインポートを使用します。それがそのためです。それを望まない場合は、別の形式の import ステートメントを使用してください。

moduleの代わりに入力できるようにしたい場合modules.moduleは、 do import modules.module as module、あなたが見つけたように、または do を実行しますfrom modules import module

于 2013-01-27T19:30:30.573 に答える
2

インポートするときは、関数 foo を使用するために完全なパッケージ構文を使用する必要があります。

以下は動作するはずです

import modules.module
modules.module.foo() 

これを行うより良い方法は

from modules import module
module.foo()

3番目のエレガントではない方法(ただし、上記とまったく同じ)は次のとおりです。

import modules.module as module
module.foo()
于 2013-01-27T19:36:39.347 に答える