Python中的模塊與包


標准庫的安裝路徑

import模塊的時候,python是通過系統路徑找到這些模塊的,我們可以將這些路徑打印出來:

>>> pprint.pprint(sys.path)
['',
 '/Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg',
 '/Library/Python/2.7/site-packages/python_recsys-0.2-py2.7.egg',
 '/Users/zhanglixin/opensource/ipython',
 '/Library/Python/2.7/site-packages/pexpect-3.0-py2.7.egg',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC',
 '/Library/Python/2.7/site-packages']

那么,我們放進這些路徑里的模塊或包,就可以不需指定路徑,直接使用import導入了。特別的,/Library/Python/2.7/site-packages,我們常用的應該放在這里。

常見問題:

  • 引入某一特定路徑下的模塊

    • 使用sys.path.append(yourmodulepath)
  • 將一個路徑加入到python系統路徑下,避免每次通過代碼指定路徑

    • 利用系統環境變量 export PYTHONPATH=$PYTHONPATH:yourmodulepath
    • 直接將這個路徑鏈接到類似/Library/Python/2.7/site-packages目錄下
  • 好的建議

    • 經常使用if __name__ == '__main__',保證你寫包既可以import又可以獨立運行,用於test。
    • 多次import不會多次執行模塊,只會執行一次。可以使用reload來強制運行模塊,但不提倡。

包(package)

為了組織好模塊,將多個模塊分為一個包。包是python模塊文件所在的目錄,且該目錄下必須存在__init__.py文件。常見的包結構如下:

package_a
├── __init__.py
├── module_a1.py
└── module_a2.py
package_b
├── __init__.py
├── module_b1.py
└── module_b2.py
main.py
  • 如果main.py想要引用packagea中的模塊modulea1,可以使用:
from package_a import module_a1
import package_a.module_a1
  • 如果packagea中的modulea1需要引用packageb,那么默認情況下,python是找不到packageb。我們可以使用sys.path.append('../'),可以在packagea中的__init__.py添加這句話,然后該包下得所有module都添加* import __init_即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM