2012-03-16 50 views
2

我正試圖從當前正在執行的python文件(我將其稱爲a.py)中導入一個python文件(稱爲駐留在父目錄中的test.py)。所有涉及我的目錄有一個文件叫init.py(2強調初始化的每邊)從執行腳本內導入Python文件

我的問題:當我嘗試導入所需的文件,我收到以下錯誤

在非包試圖相對進口

我的代碼裏面a.py:

try: 
    from .linkIO can_follow # error occurs here 
except Exception,e: 
    print e 
print success 

注:我知道如果我要創建一個名爲b.py的文件並導入a.py(它本身可以導入所需的python文件),那麼它一切正常,那麼出什麼問題了?

對於如:

b.py:

import a 
print "success 2" 
+0

可能的dup,http://stackoverflow.com/questions/5497951/attempted-relative-import-in-non-package – Doboy 2012-03-16 04:26:12

回答

3

正如PEP 328規定所有進口必須是絕對的,以防止模塊屏蔽對方。絕對錶示模塊/包必須位於模塊路徑sys.path中。相對導入(即點)只允許intra-packages明智,這意味着來自同一個軟件包的模塊需要相互導入。

所以這讓你有以下幾種可能:

  1. 你打個包(你似乎已經制造),包路徑添加到SYS。路徑

  2. 你只是調整的sys.path每個模塊

  3. 你把你所有的自定義模塊到同一目錄下的啓動腳本/主應用程序

爲1和2.您可以添加一個封裝/模塊sys.path中是這樣的:

import sys 
from os.path import dirname, join 
sys.path.append(dirname(__file__)) #package-root-directory 

module_dir = 'mymodules' 
sys.path.append(join(dirname(__file__), module_dir)) # in the main-file 

BTW:

from .linkIO can_follow 

不能工作! import聲明丟失!

提醒:如果使用相對進口,您必須使用版本號:from .relmodule import xyz。沒有fromimport .XYZ是不允許的!