proj1
|__ py1.py
|__ py2.py
pkg
|__ __init__.py
|__ comm_f1.py
|__mod1
| |__ __init__.py
| |__ f1.py
| |__ f2.py
|__mod2
| |__ __init__.py
| |__ f3.py
| |__ f4.py
我知道有一些类似的问题,但我的看似有点不同。 我有上面的项目和包目录。 ' pkg'目录包含一些我将用于我的项目的基本功能和类' proj1'或者' proj2'等,所以我不想保持' pkg'在' proj1'。我调试了' proj1'与VS2015,告诉它参考' pkg'目录,它运作良好。但是现在我创建了comm_f1.py,它有一些常见的函数/类,我相信可以被不同的子模块使用,例如' mod1'和' mod2'等等,例如,在f3.py中我想通过使用以下方式从comm_f1导入我的类:
from ..comm_f1 import myclass
它给我一个错误消息'尝试相对导入超出顶级包' 我怎样才能优雅地解决这个问题?而且我不想涉及' pkg' (或使用' pkg')的绝对目录路径名称,因为我可能会更改' pkg'我想因为comm_f1.py只在f3.py的父目录下,所以没必要触及它的祖母' pkg'
答案 0 :(得分:2)
您可以尝试扩展路径,然后像这样导入
/apps/client
答案 1 :(得分:1)
proj1
|__ py1.py
|__ py2.py
pkg
|__ __init__.py
|__common
| |__ __init__.py
| |__ comm_f1.py
|__mod1
| |__ __init__.py
| |__ f1.py
| |__ f2.py
|__mod2
| |__ __init__.py
| |__ f3.py
| |__ f4.py
我没有找到确切的解决方案,但如果我将此comm_f1.py
放入目录common
,请在通讯员from comm_f1 import *
中声明__init__.py
,然后我就可以使用从任何地方使用from common import myclass
的一切。所以我添加了一个模块。我不知道这是一个好的解决方案,还是会有任何潜在的问题,但似乎有效。