'尝试在非包中进行相对导入'尽管在一个目录中包含__init__.py

Ale*_*lex 29 python python-import python-2.7

我有一个名为的模块extended.py,其中包含以下行:

from .basic import BasicModule
Run Code Online (Sandbox Code Playgroud)

并且该文件与此目录basic.py位于同一目录中__init__.py.但是,当我尝试运行它时:

python extended.py
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)

还添加了这一行:

from __future__ import absolute_import
Run Code Online (Sandbox Code Playgroud)

没有解决问题.也许我太累了,看不到明显的 - 但我没有看到这里的问题.

Mar*_*ers 52

相对导入仅适用于包,但是当您导入时,extended.py您正在运行顶级模块.

当前目录可能包含一个__init__.py文件但exended.py尚未成为包的一部分.

要将某些内容视为包,您需要导入目录名称.以下将有效:

main.py

packagename\
    __init__.py
    basic.py
    extended.py
Run Code Online (Sandbox Code Playgroud)

然后main.py放入:

import packagename.extended
Run Code Online (Sandbox Code Playgroud)

只有然后extended一个包的一部分,做相对导入工作.

相对进口现在拥有的东西是相对的packagename父.

  • 但是在这种情况下我怎么能运行`unittests`呢?我是否要为这些导入案例指定python参数(-m)? (3认同)
  • 当然,将测试与包捆绑在一起,但可能不会直接将测试作为脚本*运行*.使用其他工具来发现测试,例如`nose`. (2认同)