1

私はパッケージを持っています:

mypkg
|-- __init__.py
|-- __main__.py
|-- mod1.py

__main__.py

from mypkg import mod1

def main():
    print("Hello from mypkg main!")
    print(mod1.mod1_msg())

if __name__ == '__main__':
    main()

ファイル__init__.pyが空です。

たとえば、指定されたパスから mypkg を実行する必要があります。

python -m mypath.mypkg

この方法で mypkg を実行すると、次のエラーが表示されます。

ImportError: cannot import name 'mod1' from 'mypkg' (unknown location)

from mypkg import mod1これは、変更すると解決できますfrom . import mod1が、PEP8 は相対インポートよりも絶対インポートを推奨しています。

私が見つけた別の解決策は、追加することです:

import sys
from os import path

sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))

__init__.pyファイルする

その後、すべてがうまく機能します。

質問は次のとおりです。より良い解決策は何ですか? 相対インポートを使用するか、sys.path を操作してパッケージを適切に実行するか、この問題の別の解決策が存在する可能性がありますか?

4

0 に答える 0