web-dev-qa-db-ja.com

Python

やあみんな-私はPythonの相対的なインポートで髪を引っ張っています。私はドキュメントを30回読みましたが、ここSOや他のフォーラムに多数の投稿がありますが、まだ機能していないようです。

私のディレクトリ構造は現在このようになっています

src/
    __init__.py
    main.py
    components/
        __init__.py
        expander.py
        language_id.py
    utilities/
        __init__.py
        functions.py

Expander.pyとlanguage_id.pyに汎用モジュールへのアクセス権を持たせたい。 python main.pyを実行します。これは、components.expander import *およびcomponents.language_idimport *からモジュールに問題なくアクセスします。

ただし、汎用モジュールにアクセスするためのエクスパンダとlanguage_id内のコードは次のとおりです。

from ..utilities.functions import *

このエラーが表示されます:

ValueError: Attempted relative import beyond toplevel package

私はそれを何度も調べましたが、ドキュメントに従っているようです。誰かがここで何が悪いのかについて何か考えがありますか?

28
apexdodge

気にしないで、私はそれを解決しました:

src/
    main.py
    mod/
        __init__.py
        components/
            __init__.py
            expander.py
            language_id.py
        utilities/
            __init__.py
            functions.py

main.pyは、サブパッケージを次のように参照します。

from mod.components.expander import *
from mod.utilities.functions import *

expander.pyとlanguage_id.pyは、以下を使用してfunctions.pyにアクセスできます。

from ..utilities.functions import *

しかし、興味深いのは、expander.pyが使用するコンポーネントディレクトリ内にテキストファイルがあったことです。ただし、実行時に、同じディレクトリにあるにもかかわらず、ファイルを見つけることができませんでした。テキストファイルをmain.pyと同じディレクトリに移動しましたが、機能しました。直感に反しているようです。

21
apexdodge