python 3.5

时间:2016-10-06 17:35:23

标签: python

这个结构只是一个例子

pkg\
  test\
    __init__.py
    test.py
  __init__.py
  source.py
  another_source.py

another_source.py

class Bar():
  def __init__(self):
    self.name = "bar"

source.py

from another_source import Bar
class Foo():
  def __init__(self):
    self.name = "foo"
    b = Bar()

test.py

from ..source import Foo

if __name__== "__main__":
    f = Foo()
    print(f.name)

现在我想运行test.py. 因为它已被接受为answer我必须超越我当前的包并运行

python -m pkg.test.test

但这不起作用,python给我一个追溯

Traceback (most recent call last):
  File "-\Python35\lib\runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "-\Python35\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "~\test\test.py", line 1, in <module>
    from ..source import Foo
  File "~\source.py", line 1, in <module>
    from another_source import Bar
ImportError: No module named 'another_source'

如果我删除所有的another_source-stuff它会起作用,但这不是解决方案。

现在有一种理智的方式从我上面的一个目录中导入类吗?

1 个答案:

答案 0 :(得分:1)

_Ptr正在尝试从pkg.source模块导入内容,就好像它是顶级的一样。需要纠正这种情况:

pkg.another_source