【如何導入包】 python
兩點搞定,就能夠import了:
程序員
【打開文件的路徑和導入模塊的路徑】 app
打開文件用的「路徑」和導入模塊的「路徑」是不同的。
打開文件的路徑是你主程序文件(.py)啓動時所在的路徑,這個當前路徑是一個肯定的惟一的路徑,例如,當使用PythonWin打開D:\p2pEnv\mainbranch\Tribler\Tools\createlivestream.py時: 優化
import os print os.getcwd() 'D:\\p2pEnv\\mainbranch\\Tribler\\Tools'
# 能夠以下切換當前目錄 os.chdir(r'C:\Python27\Lib')
模塊搜索的路徑是經過sys.path指定的路徑,該變量初始化時默認包含了
spa
使用sys.path.append(modulepath)添加的路徑只在運行時有效,下次運行編譯器時就不存在了,這裏modulepath能夠是包含.py/pyc/pyo/pyw等文件的zip或egg。 設計
import sys print sys.path ['C:\\', 'C:\\WINDOWS\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27\\Lib\\site-packages\\Pythonwin', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\Python27\\lib\\site-packages\\wx-2.8-msw-unicode']
【__init__.py文件】 code
__init__.py文件:導入包以前都會調用該文件 ip
只要第一次導入包中的任何部分,就會執行文件__init__.py中的代碼。這個文件能夠爲空,但也能夠包含可執行特定於該包的初始化工做的代碼。在import語句執行期間,遇到的全部__init__.py文件都會執行。所以,語句import Graphics.Primitive.fill將會首先執行Graphics目錄中的__init__.py文件,而後執行Primitive目錄中的__init__.py文件。 unicode
在使用包時,處理下面這條語句時須要當心:
開發
from Graphics.Primitive import *
使用該語句的程序員一般但願將與某個包相關聯的全部子模塊導入到當前命名空間中。可是,因爲各個子系統之間的文件名約定不一樣(特別是在區分大小寫上),Python沒法準確地肯定各個模塊的具體內容。結果,該語句只會導入在Primitive目錄的__init__.py文件中定義的全部名稱。這個列表應該在包的__init__.py文件中定義,例如:
# Graphics/Primitive/__init__.py __all__ = ["lines", "text", "fill"]
所以,能夠在__init__.py文件中定義__all__,經過該定義,模塊(或包)能夠精確控制導入的名稱集合,好比module.py中
__all__ = ["bar", "SomeClassName", "SomeProperty", "SomeFunction"]
單獨導入包名稱不會導入包中所包含的子模塊,好比
import somepkg somepkg.somemodule(xx) #失敗
但因爲import somepkg會執行somepkg目錄下的__init__.py文件,全部若是__init__.py中有from . import somemodule之類的語句,則somepkg.somemodule(xx) 就能夠正確執行了。
【文件格式】
python並不是徹底是解釋性語言,它是有編譯的。python程序執行時一般是先把源碼.py文件編譯成.pyc或者.pyo,而後由python的虛擬機執行。相對於.py文件,編譯獲得的.pyc和.pyo從本質上講和.py沒有太大區別,只是會提升當前模塊的加載速度,但並無提升代碼的執行速度。一般狀況下不用主動去編譯.py文件,文檔上說只要調用了import model那麼model.py就會自動被先編譯成model.pyc而後再加載。
.pyc:預編譯過的.py文件
.pyo:優化的預編譯過的.py文件
.pyw:
Windows下.py文件用 python.exe 運行,.pyw文件用 pythonw.exe 運行
跟 python.exe 比較起來,pythonw.exe 有如下的不一樣: