2016-11-08 48 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。所以我添加了一個模塊。我不知道這是一個好的解決方案,還是會有任何潛在的問題,但似乎有效。