2017-09-20 13 views
2

私のプロジェクトは、以下の構造を有する:ここでは1つのサブモジュールを別のサブモジュールからインポートするには?

DSTC/ 
    st/ 
     __init__.py 
     a.py 
     g.py 
     tb.py 
    dstc.py 

は一部でa.pyである:ここで

import inspect 
import queue 
import threading 

が一部でtb.pyです:直接実行すると

import functools 
from . import a 

a.pyはエラーを生成しません、SyntaxErrorがないことを確認するのは簡単です。しかし、tb.pyを実行すると、次のエラーが発生します。tbがエラーを発生させずに直接実行することができるように

"C:\Program Files\Python36\python.exe" C:/Users/user/PycharmProjects/DSTC/st/tb.py 
Traceback (most recent call last): 
    File "C:/Users/user/PycharmProjects/DSTC/st/tb.py", line 15, in <module> 
    from . import a 
ImportError: cannot import name 'a' 

Process finished with exit code 1 

にはどうすればtbからaの輸入を書き換える必要がありますか?

答えて

-1

モジュールaのみをインポートする必要があります。

import a 
+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューの投稿](レビュー/低品質の投稿/ 17394397) –

+0

これは、*答えですが、後でもっと精巧な答えで冗長になりました。 –

0

あなたは

import a 

または相対

from .a import * 

を使用することができ、この場合、モジュール**a**はあなたのために働く意志

python -m a tb.py 

をロードする必要がありますどちらか。

import * is discouraged, import just as you need

次のようにあなたのDSTCでmain.pyを得た場合:

# main.py 
from st import tb 

をし、あなただけの相対的なアプローチは、この時間ので、あなた

# tb.py 
import a # will not work 
from .a import * # will work 

のために動作しますmain.pyを実行しますあなたはモジュールとして 'a'を読み込みます。

-1

import .aまたはそれ以上、import st.aを使用してください。これらは、スクリプトのように実行するのではなく、tbをパッケージの一部としてインポートする場合(親ディレクトリからpython -mスイッチを使用するなど)にのみ機能します。

他の人からも言われているように、単にimport aが動作します。これは関係なく、stはモジュールやスクリプトとして実行されているかどうかの作業を有利に持っているが、それは悪い習慣だとのみ、3

同じことが他の人が言及しているfrom変異体にも適用されるPythonのではないのpython 2上で動作します。

関連する問題