想象一下这个目录结构:
app/
__init__.py
sub1/
__init__.py
mod1.py
sub2/
__init__.py
mod2.py
Run Code Online (Sandbox Code Playgroud)
我正在编码mod1,我需要从中导入一些东西mod2.我该怎么办?
我尝试了from ..sub2 import mod2但是我得到了"尝试非包装中的相对导入".
我google了一下,但发现只有" sys.path操纵"黑客.有没有干净的方式?
编辑:我__init__.py的所有人目前都是空的
EDIT2:我想这样做,因为SUB2包含了为子包(共享类sub1,subX等等).
Edit3:我正在寻找的行为与PEP 366中描述的相同(感谢John B)
嘿所有 - 我用Python中的相对导入拉出我的头发.我已经阅读了30次文档和SO和其他论坛上的大量帖子 - 似乎仍然没有用.
我的目录结构目前看起来像这样
src/
__init__.py
main.py
components/
__init__.py
expander.py
language_id.py
utilities/
__init__.py
functions.py
Run Code Online (Sandbox Code Playgroud)
我希望expandder.py和language_id.py可以访问函数模块.我运行python main.py,它可以从components.expander import*和components.language_id import*访问模块.
但是,在expandder和language_id中的代码访问函数模块:
from ..utilities.functions import *
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ValueError: Attempted relative import beyond toplevel package
Run Code Online (Sandbox Code Playgroud)
我已经过了很多次,它似乎遵循文档.任何人都对这里出了什么问题有任何想法?