Relative imports in Python
嘿所有 - 我用Python中的相对导入拉出我的头发。 我已经阅读了30次文档和SO和其他论坛上的大量帖子 - 似乎仍然没有用。
我的目录结构目前看起来像这样
1 2 3 4 5 6 7 8 9 10 | src/ __init__.py main.py components/ __init__.py expander.py language_id.py utilities/ __init__.py functions.py |
我希望expandder.py和language_id.py可以访问函数模块。 我运行python main.py,它可以从components.expander import *和components.language_id import *访问模块。
但是,在expandder和language_id中的代码访问函数模块:
1 | from ..utilities.functions import * |
我收到此错误:
1 | ValueError: Attempted relative import beyond toplevel package |
我已经过了很多次,它似乎遵循文档。 任何人都对这里出了什么问题有任何想法?
没关系,我解决了它:
1 2 3 4 5 6 7 8 9 10 11 | src/ main.py mod/ __init__.py components/ __init__.py expander.py language_id.py utilities/ __init__.py functions.py |
main.py然后将子包称为:
1 2 | from mod.components.expander import * from mod.utilities.functions import * |
expandder.py和language_id.py可以访问functions.py:
1 | from ..utilities.functions import * |
但有趣的是,我在componentsder.py使用的components目录中有一个文本文件。 但是,在运行时,即使文件位于同一目录中,也无法找到该文件。 我将文本文件移动到与main.py相同的目录,并且它工作正常。 似乎违反直觉。