2013-10-09 80 views
0

我在使用Python管理模塊和pacakges依賴項時遇到了問題。我在Windows 7和使用Python 3.3 我想有這樣一個基本的結構基金:Python中的軟件包組織

/ 
myTask.py 
-->utils 
    --> utils1.py 
    --> utils2.py 
-->processes 
    --> process1.py 
    --> process2.py 

MyTask將運行過程1。處理1導入過程2和進口utils1和utils2在utils包

所以在過程1我有

import sys 
sys.path.append('..path..\\utils\\') 
from utils1 import * 
from utils2 import * 
from process2 import * 

if __name__ == '__main__': 
    my_method() 

def my_method(): 
    ####CODE 

我可以運行處理1爲腳本和工作正常。 MyTask.py樣子:

import processes.process1 
process1.my_method() 

當我運行它,我收到和錯誤,說:

ImportError: No module named 'process2' 

是我封裝/模塊結構是否正確?爲什麼我會收到該錯誤?

+0

您是否嘗試將包含myTask.py的目錄添加到您的PYTHONPATH中? – Wookie88

回答

1

您創建的結構中有幾個錯誤。

首先,在python包中必須包含__init__.py文件。這是普通的python文件,它可能完全是空的。它需要標記文件夾爲python包

接下來,你不應該混淆sys.path excplicitly,尤其是使用相對路徑(除非你確定你在做什麼,但這次你絕對不是)。

所以,正確的文件夾結構將是

/MyTask.py 
/processes 
    __init__.py 
    process1.py 
    process2.py 
/utils 
    __init__.py 
    utils1.py 
    utils2.py 

而且process1.py

from utils import utils1, utils2 # relative import 
import process2      # import from same package 

# everything else 

MyTask.py

import processes.process1 
process1.my_method() 

更多關於包裝python docs

+0

我有'__init __。py'我沒有包括它們的簡化。我過去試過「從utils import utils1,utils2」但沒有工作。我收到錯誤消息:「ImportError:No module named'utils'」 – user2082695

+1

它應該是'__init __。py',而不是'init.py'。注意下劃線。你不應該忽略它們,因爲它們非常相關。 – J0HN