2017-04-08 17 views
0

我有以下文件夾結構。爲什麼`__init __。py`可以導入一個子模塊,但是使用`from module import *`導入的測試文件不能?

project/ 
    sandbox.py 
    module/ 
     __init__.py 
     klass.py 

__init__.py有以下幾點:

from klass import Klass 

if __name__ == '__main__': 
    'do stuff' 

這工作得很好。 sandbox.py看起來是這樣的:

from module import * 

if __name__ == '__main__": 
    'do similar stuff' 

在命令行上,而在project目錄:

$ python module/__init__.py 
# things work correctly 
$ python sandbox.py 
Traceback (most recent call last): 
    File "sandbox.py", line 1, in <module> 
    from module import * 
    File "/Uses/chuck/.../project/module/__init__.py, line 1 in <module> 
    from klass import Klass 
ImportError: No module named 'klass' 

認爲這可能與相對進口的事,並試圖改變from klass import Klassfrom .klass import Klass,但那也沒用。

我的目標是,從模塊外的文件,能夠使用from module import *from module import Klass。我需要做什麼?

萬一它很重要,這是與虛擬環境中的macOS下的Python 3.5.2。此

回答

1

使用絕對路徑和__main__.py文件:

from module.klass import Klass 

'do stuff' 

__init__.py

$ python sandbox.py 
do similar stuff 
$ python -m module 
do somthing 
+0

你能指出我到:

from .klass import Klass 

現在,您可以按以下執行它鏈接,這將幫助我瞭解這些進口應該如何工作的細節? – Chuck

+0

https://docs.python.org/3/library/__main__.html,https://www.python.org/dev/peps/pep-0328/ –

相關問題