不管是用import還是用from mmmm import *的方式匯入模組,當程式執行之後,回頭在看那個儲存著mmmm.py檔案的目錄中,多了乙個檔案:
$ ls mmm*
mmmm.py mmmm.pyc
在這個目錄下面,除了原來的那個mmmm.py之外,又多了乙個mmmm.pyc檔案,這個檔案不是我寫的,需要用import的過程說起。
import mmmm,並不是僅僅將mmmm.py這個檔案裝載到當前位置(檔案內),其實是首先進行了一次運算。當mmmm.py被第一次匯入的時候,python首先要對其進行編譯,生成擴充套件名為.pyc的同名檔案,然後才執行mmmm模組的**,建立相應的物件等。就如同把大象裝進冰箱,有三步要執行:
搜尋。就是python要能夠找到import的模組。怎麼找到,後面講述。
執行。執行就是前面已經編譯的模組位元組碼檔案,順理成章要執行了。
一般情況下,python會自動的完成模組搜尋過程。但是,在某些情況下,或許會要求程式設計師來設定搜尋路徑。當import乙個模組後,python會按照下面的順序來找那個將要匯入的模組檔案
程式的主目錄。上一講中,在codes這個目錄中執行互動模式,這時候的主目錄就是codes,當在那個互動模式中執行import mmmm的時候,就首先在codes這個目錄中搜尋相應的檔案(找到.py之後編譯成為.pyc)。當然,後面在網頁程式設計中,所謂主目錄是可以通過頂層檔案設定的目錄。
pythonpath目錄。這是乙個環境變數設定,如果沒有設定則濾去。如何進行環境變數設定,請google啦。
標準庫目錄。已經隨著python的安裝進入到計算機中的那個。
任何.pt**件的內容。如果有這類檔案,最後要在這類檔案中搜尋一下。這是乙個簡單的方法,在.pt**件中,加入有效目錄,使之成為搜尋路徑。下圖就是我的計算機上,存放.pt**件的位置以及裡面放著的.pt**件
也可以自己編寫.pt**件,裡面是有關搜尋目錄,儲存到這裡。比如,開啟目錄中的easy-install.pt**件,發現的內容:
搜尋就是這麼乙個過程。這裡建議了解即可,不一定非要進行什麼設定,在很多情況下,python都是會自動完成的。特別是初學者,暫且不要輕舉妄動。
以mmmm模組為例。
在乙個shell裡面,執行了python,並且做了如下操作:
>>> import mmmm
>>> mmmm.web
''
#!/usr/bin/env python
#coding:utf-8
web = ", i am writing a python book on line. "
def my_name(name):
print name
class pythoner:
def __init__(self,lang):
self.lang = lang
def programmer(self):
print "python programmer language is: ",self.lang
儲存之後,切換到原來的那個匯入了模組的互動模式:
>>> mmmm.web
''
輸出的跟前面的一樣,沒有任何變化,這是為什麼呢?
>>> reload(mmmm)
>>> mmmm.web
', i am writing a python book on line. '
這下就顯示修改之後的內容了。 python載入模組 Python 模組的載入順序
基本概念 module 模組,乙個 py 檔案或以其他檔案形式存在的可被匯入的就是乙個模組 package 包,包含有 init 檔案的資料夾 relative path 相對路徑,相對於某個目錄的路徑 absolute path 絕對路徑,全路徑 python 直譯器是如何查詢包和模組的 pyth...
python 模組載入
本文主要介紹python模組載入的過程。所有的module都是由物件和物件之間的關係組成。python中所有的東西都是物件,分為三類 型別type 類class和例項instance。三種物件之間的兩種關係 類和物件的關係可以通過內建方法type來辨別。python中,任何乙個類都是直接或間接繼承自...
python模組載入
秉著python一切皆為物件的原則,我來看看python庫的型別 import os print type os 結果為乙個名為 module 的型別 1 什麼樣的檔案型別叫做模組 以.py檔案結尾的都可以被python認為是模組 2 package的概念 為了幫助組織模組並提供名稱層次結構,pyt...