为什么`__init __。py`可以导入子模块,但是带有`from module import *`的测试文件可以' t?

时间:2017-04-08 03:41:06

标签: python

我有以下文件夹结构。

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 Klass更改为from .klass import Klass,但这也不起作用。

我的目标是,从模块外部的文件中,可以使用from module import *from module import Klass。我需要做什么?

如果重要,则在虚拟环境中的macOS下使用Python 3.5.2。

1 个答案:

答案 0 :(得分:1)

使用绝对路径和__main__.py文件:

from module.klass import Klass

'do stuff'

__init__.py

from .klass import Klass

现在你可以按如下方式执行它:

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