Python中的模塊與包

標準庫的安裝路徑

import模塊的時候,python是經過系統路徑找到這些模塊的,咱們能夠將這些路徑打印出來: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,咱們經常使用的應該放在這裏。app

常見問題:

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

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

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

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

包(package)

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

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_便可。
相關文章
相關標籤/搜索