2

我有这样的设置:

projectpath/__main__.py
projectpath/backend/__init__.py
projectpath/backend/backend1.py
projectpath/backend/backend2.py

导入和使用__main__.py后端文件以及backend2.py导入和使用backend1.py. 我曾经这样做过:

__main__.py:

import backend.backend1 
import backend.backend2

backend2.py:

import backend1

这行得通,但现在我使用的是 mypy(Python 静态类型检查器),并且它要求所有导入路径都相对于__main__.py,所以我的 backend2.py 现在看起来像这样:

import backend.backend1 as backend1

mypy 现在说这很好,但是当我尝试执行它时,我收到以下错误:

Traceback (most recent call last):
  [...]
  File "./backend/backend2.py", line 1, in <module>
    import backend.backend1 as backend1

有没有办法允许以那种风格导入,所以允许从 ? 的执行路径导入__main__.py

4

1 回答 1

0

我写了一些示例代码来在带有 python 2.7.9 的 linux Debian 8.6 上测试这个问题。我可以通过mypy这种方式在 Python 2 解释器导入模块上运行测试和代码:

projectpath/__main__.py

from backend import backend2


if __name__ == '__main__':
    ba2 = backend2.Backend2("ex")
    print ba2.getb1()

projectpath/backend/backend1.py

class Backend1:
    def __init__(self, b=0):
        # type: (int) -> None
        self.b = b

    def b1(self):
        # type: () -> str
        return 'b1!'

projectpath/backend/backend2.py

from backend1 import Backend1


class Backend2:
    def __init__(self, b='text'):
        # type: (str) -> None
        self.b = b

    def getb1(self):
        # type: () -> str
        x = Backend1()
        return 'b2:' + x.b1() + ';'


if __name__ == '__main__':
    z = Backend2()
    print z.getb1()

您可以在此处找到有关mypyPython 2 中类型检查的文档。

于 2016-12-27T12:02:51.437 回答