2010-12-23 51 views
2

我希望這個問題有一個簡單的答案,我簡直可以忽略。如何將腳本的父目錄加載爲模塊,而不將該目錄的父目錄的所有同級添加到我的sys.path?

這裏的設置:

foo/ 
    __init__.py 
    run.py 

run.py的內容:

import foo 

運行腳本:

$ python run.py 
Traceback (most recent call last): 
    File "run.py", line 1, in <module> 
    import foo 
ImportError: No module named foo 

我可以找出解決的唯一途徑,這是:

內容o ˚Frun.py:

import sys 
import os 

path = os.path.abspath(__file__) 
sys.path.append(os.path.join(os.path.dirname(path), "../")) 

import foo 

使作品,但問題(如果我沒有記錯的話)是,這增加了foo的父目錄/於sys.path,因此搜索所有foo的兄弟文件夾/對於Python模塊。

有一種情況我有我真的,真的不想這樣做。我只想將一個目錄作爲模塊添加到我的路徑中,但我無法弄清楚如何添加該模塊而不添加添加該目錄的父目錄,從而添加該父目錄下的每個其他目錄。

我可以在這裏看到什麼嗎?有沒有簡單的方法,我可以添加一個腳本的父文件夾作爲一個模塊?

+0

你可以修改`sys.path`,`import foo`,然後將`sys.path`返回到它之前的狀態嗎? – marcog 2010-12-23 16:17:39

+2

呃,爲什麼`run`意味着要導入自己的父包? – katrielalex 2010-12-23 16:20:42

回答

0

我不太明白爲什麼run是爲了導入自己的父母。畢竟,一個軟件包只是一種收集模塊的方式。它並不意味着它具有重要的功能。

包是通過使用 「帶點模塊名稱」構建 Python的模塊名稱空間的一種方式。例如, 名爲AB的模塊在一個名爲 A.正如同用模塊的封裝指定一個稱爲b 子模塊不必擔心對方的 全局變量的名稱,使用保存 不同模塊的作者從 虛線模塊名稱保存作者 多模塊包如NumPy或 Python成像庫從 擔心彼此的模塊 名稱。

你確定你不想run導入同級模塊?你可以使用relative imports

相關問題