从执行路径导入

时间:2016-03-15 15:24:51

标签: python python-2.7 type-hinting mypy

我有这样的设置:

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的执行路径导入?

1 个答案:

答案 0 :(得分:0)

我编写了一些示例代码,用于使用python 2.7.9在Linux Debian 8.6上测试这个问题。 我可以通过这种方式在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()

mypy

您可以在Python 2中找到有关setContentView(R.layout.main);类型检查的here文档。