繁体   English   中英

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

[英]Why can `__init__.py` import a submodule but a test file with `from module import *` can't?

我有以下文件夹结构。

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。

为此,请使用绝对路径和__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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM