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

Python 2 での型チェックに関するドキュメントは、こちらにあります。mypy

于 2016-12-27T12:02:51.437 に答える