python从不同目录导入 - '尝试相对导入超出顶级包'

时间:2016-11-08 17:41:48

标签: python

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'

2 个答案:

答案 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的一切。所以我添加了一个模块。我不知道这是一个好的解决方案,还是会有任何潜在的问题,但似乎有效。