私はパッケージを持っています:
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 を操作してパッケージを適切に実行するか、この問題の別の解決策が存在する可能性がありますか?