私はPythonのインポートシステムを使い、よりうまく動作するかどうかを理解していましたが、別の問題が発生しました。ValueError:トップレベルパッケージを越えて相対インポートを試みました
:今、私は次のエラーが表示されimport subpkg.a
を:
from . import b
from .. import d
そしてc.py
の内側に、私は次のようしている:私は、私は次のコードを持っているa.py
内側次の構造
pkg/
__init__.py
c.py
d.py
subpkg/
__init__.py
a.py
b.py
を持っています
ValueError: attempted relative import beyond top-level package
しかしなぜ?どうすれば解決できますか?私はIDLEからc.py
を実行しており、pkg
は__init__.py
というファイルを持っているので、パッケージと見なすべきです。
最初のインポートが正常に動作しますが、それは動作しません。次のです:いくつかの奇妙な理由で、私は親パッケージから何かをインポートしようとしていますが、どうやら私はできませんので
from .. import d
。
を私が行う場合は '私が受け取る.subpkgインポートA'から:'はSystemError:親モジュール「」ロードされていないが、IDLEからと端末からの相対import'を実行することはできません。.. 。 – nbro
@nbroこれはあなたがIDLEの中にいるためですが、モジュールの中で実行すると、インポートはそのようになります。 IDLEはひどいIDEで一般的なPython開発には悪いです。 IDLEモジュールと内部モジュールの両方で最適なオプションは、 'sys.path'に' pkg'ディレクトリを追加した後、 'pkg import subpkg.a'から完全なパッケージ名を使用することです。 – JBernardo
どういう意味ですか?それをモジュールの中で実行しますか?私は、あなたが提案したように、ターミナルとIDLEの両方からファイル 'c.py'を(主として)実行すると、私は上記のエラーを私に与えます。 IDLEはひどいIDEですが、それはPythonに付属していますか?ひどいIDEを運ぶ目的は何でしょうか? IDLEは、確かに最高のものではない単純なIDEですが、理論的にはPythonでうまくいくはずです。それ以外の場合は意味がありません。 – nbro