2016-11-08 73 views
0
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'等,这样我就不想在'proj1'下面保留'pkg'。我用VS2015调试'proj1',告诉它参考'pkg'目录,它工作得很好。但是现在我创建了comm_f1.py,它有一些常见的功能/类,我相信可以使用不同的子模块,如'mod1'和'mod2'等,例如,在f3.py中我想从comm_f1中导入我的类使用:python从不同目录导入 - '尝试相对导入超出顶级包'

from ..comm_f1 import myclass 

它给我的错误信息“试图相对进口超出顶层包” 我怎么能完美地解决这个问题呢?我不想让'pkg'的名字(或绝对目录路径名称与'pkg'),因为我可能会改变'pkg'的名称,我想因为comm_f1.py只在f3.py的父级目录,它没有必要必要去碰它的盛大父母“PKG”

回答

2

你可以尝试扩大你的路径,然后导入这样

import sys 
sys.path.append("../") 
from comm_f1 import myclass 
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。所以我添加了一个模块。我不知道这是一个好的解决方案,还是会有任何潜在的问题,但似乎有效。