2013-03-06 63 views
36

我到處都看到使用import sysimport mymodule如果import語句只包含文件名,python如何找到模塊文件?

Python代碼導入模塊如何解釋找到正確的文件,如果不提供目錄或路徑?

+12

型'的幫助(「進口」)'在控制檯和享受什麼。 – DSM 2013-03-06 15:58:54

+1

http://effbot.org/zone/import-confusion.htm – Hoopdady 2013-03-06 15:59:28

+0

['import' statement](http://docs.python.org/2/reference/simple_stmts.html#the-import-statement) – jfs 2013-03-06 16:02:13

回答

39

http://docs.python.org/3/tutorial/modules.html#the-module-search-path

6.1.2。模塊搜索路徑

當導入名爲spam的模塊時,解釋器首先搜索具有該名稱的內置模塊。如果未找到,則它將在變量sys.path給出的目錄列表中搜索名爲spam.py的文件。 sys.path從這些位置初始化:

  • 包含輸入腳本(或未指定文件時的當前目錄)的目錄。
  • PYTHONPATH(目錄名稱列表,其語法與shell變量PATH相同)。
  • 安裝相關的默認值。

注:在支持符號鏈接的文件系統,符號鏈接後面之後計算包含輸入腳本的目錄。換句話說,包含符號鏈接的目錄不會被添加到模塊搜索路徑中。

初始化後,Python程序可以修改sys.path。包含正在運行的腳本的目錄放置在搜索路徑的開頭,位於標準庫路徑之前。這意味着該目錄中的腳本將被加載,而不是庫目錄中相同名稱的模塊。除非要進行替換,否則這是錯誤的。更多信息請參見標準模塊部分。

有關「特定於安裝的默認設置」的信息,請參閱關於the site module的文檔。

0

Python有一個路徑變量,就像你在終端裏面有一個變量。 Python會在該路徑內的文件夾或程序所在的文件夾中查找模塊。

5

它使用PYTHONPATH,設置爲環境變量,以找到(含有__init__.py文件的文件夾)包和模塊(或者,如果已經加載一次,從sys.modules檢索模塊對象)。

+0

謝謝!順便說一下,原則上允許使用絕對路徑還是相對路徑?我會在10分鐘內接受 – Asciiom 2013-03-06 15:59:57

+0

您可以使用,但一般而言,爲了清晰的代碼,絕對是首選。 – 2013-03-06 17:15:02

17

此外,你可以看到當前的路徑是通過使用sys模塊

import sys 
print sys.path 
相關問題