29

大家好——我正在用 Python 中的相对导入来拉扯我的头发。我已经在 SO 和其他论坛上阅读了 30 次文档和大量帖子 - 似乎仍然不起作用。

我的目录结构目前看起来像这样

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,它可以通过 from components.expander import * 和 components.language_id import * 很好地访问模块。

但是,expander 和 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 回答