質問: "hello" ``` test2.py ``` # .testとするとImportError: attempted relative import with no known parent package # と表示される。 from test import hello as A print(A) ```
回答: ここに答えがあるようですね。パッケージ内の相対インポートという物で使うための物のようです。 Pythonの相対インポートで上位ディレクトリ・サブディレクトリを指定 > > パッケージを自作する場合、...途中省略...そのようなときは、相対パスで相対的な位置を指定してインポート(相対インポート)することができる。 > > > > > パッケージ内のファイルのように、他のファイルからモジュールとしてインポートされるファイルの中では相対パスを使えるが、pythonコマンドなどで実行されるファイルの中では相対パスは使えないので注意。 > > > つまり単体のスクリプトである`test.py`と`test2.py`はパッケージの構成部品では無いので、`from import`の先頭に`.`は使えないということなのでしょう。 6.4.2. パッケージ内参照 > > 相対 import は現在のモジュール名をベースにすることに注意してください。メインモジュールの名前は常に`"__main__"`なので、Python アプリケーションのメインモジュールとして利用されることを意図しているモジュールでは絶対 import を利用するべきです。 > > >