2013-09-05 91 views
0

我是Python的新手,我正在尋找Python如何發現從它導入模塊的路徑。這將相當於Java中的CLASSPATH和Perl中的PERL5LIBPython路徑來查找要導入的模塊/類

E.g.在腳本我期待在進口塊看起來是這樣的:

import os 
import resource 

from localnamespace.localmodule import some_class 

我明白osresource原產於Python的(是語言的核心API的一部分),但仍解釋者必須有一定的指針哪裏找到他們。至於localnamespace.localmodule,我們如何告訴解釋器在哪裏找到這個模塊,因爲這個腳本所在的目錄沒有名爲localnamespace的子目錄。

+2

看看環境變量'PYTHONPATH'和'sys.path'。 –

+0

我沒有'PYTHONPATH'設置,但腳本找到了導入 – amphibient

+1

然後默認路徑啓動。檢查'sys.path'找出它是什麼。 –

回答

1

TLDR

綜上所述,搜索過程進行類似:

1)sys.modules之前導入?

2)如果否,我可以在腳本/解釋器目錄中找到它嗎?

3)如果不是,我可以在PYTHONPATH環境變量的任何目錄中找到它嗎?

4)如果沒有,ImportError

的較長答案

參照在sys.modules文檔的import語句首先尋找其是當前或最近加載的模塊的字典。

它在那裏找不到模塊sys.meta_path - 這裏的實際路徑因實現而異。通常,導入路徑將在sys.path中定義,該目錄是包括環境變量PYTHONPATH中的目錄在內的目錄列表。

sys.path該文檔描述了自己作爲:

的字符串列表,用於指定模塊的搜索路徑。從環境變量PYTHONPATH初始化,加上依賴於安裝的默認值。

在程序啓動時初始化,此列表中的第一項path [0]是包含用於調用Python解釋器的腳本的目錄。如果腳本目錄不可用(例如,如果解釋器是交互式調用的,或者腳本是從標準輸入讀取的),則path [0]是空字符串,它指示Python首先搜索當前目錄中的模塊。請注意,由於PYTHONPATH而插入的條目之前插入了腳本目錄。