29

やあみんな-私は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に関数モジュールへのアクセス権を持たせたい。components.expanderimport*およびcomponents.language_idimport*からモジュールに問題なくアクセスするpythonmain.pyを実行します。

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

from ..utilities.functions import *

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

ValueError: Attempted relative import beyond toplevel package

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

4

1 に答える 1

21

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

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 が使用する components ディレクトリ内にテキスト ファイルがあったことです。ただし、同じディレクトリにあるにもかかわらず、実行時にファイルを見つけることができませんでした。テキスト ファイルを main.py と同じディレクトリに移動したところ、機能しました。直感に反するようです。

于 2010-11-14T01:05:10.130 に答える