【问题标题】:Import from execution path从执行路径导入
【发布时间】:2016-07-01 03:19:48
【问题描述】:

我有这样的设置:

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

【问题讨论】:

    标签: python python-2.7 type-hinting mypy


    【解决方案1】:

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

    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()
    

    您可以在 Python 2 中找到有关 mypy 类型检查的 here 文档。

    【讨论】:

    • 所以问题不存在了,对吧?我想记得读过mypy 的人可能已经改变了。在这方面。
    • 我认为有可能。
    猜你喜欢
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多