模塊和包

01. 模塊

1.1 模塊的概念

模塊是 Python 程序架構的一個核心概念html

  • 每個以擴展名 py 結尾的 Python 源代碼文件都是一個 模塊
  • 模塊名 一樣也是一個 標識符,須要符合標識符的命名規則
  • 在模塊中定義的 全局變量 、函數 都是提供給外界直接使用的 工具
  • 模塊 就比如是 工具包,要想使用這個工具包中的工具,就須要先 導入 這個模塊

1.2 模塊的兩種導入方式

1)import 導入

import 模塊名1, 模塊名2 

提示:在導入模塊時,每一個導入應該獨佔一行python

import 模塊名1 import 模塊名2 
  • 導入以後
    • 經過 模塊名. 使用 模塊提供的工具 —— 全局變量函數
使用 as 指定模塊的別名

若是模塊的名字太長,可使用 as 指定模塊的名稱,以方便在代碼中的使用程序員

import 模塊名1 as 模塊別名 

注意:模塊別名 應該符合 大駝峯命名法api

2)from...import 導入

  • 若是但願 從某一個模塊 中,導入 部分 工具,就可使用 from ... import 的方式
  • import 模塊名 是 一次性 把模塊中 全部工具所有導入,而且經過 模塊名/別名 訪問
# 從 模塊 導入 某一個工具 from 模塊名1 import 工具名 
  • 導入以後
    • 不須要 經過 模塊名.
    • 能夠直接使用 模塊提供的工具 —— 全局變量函數

注意bash

若是 兩個模塊,存在 同名的函數,那麼 後導入模塊的函數,會 覆蓋掉先導入的函數架構

  • 開發時 import 代碼應該統一寫在 代碼的頂部,更容易及時發現衝突
  • 一旦發現衝突,可使用 as 關鍵字 給其中一個工具起一個別名
from...import *(知道)
# 從 模塊 導入 全部工具 from 模塊名1 import * 

注意dom

這種方式不推薦使用,由於函數重名並無任何的提示,出現問題很差排查函數

1.3 模塊的搜索順序[擴展]

Python 的解釋器在 導入模塊 時,會:工具

  1. 搜索 當前目錄 指定模塊名的文件,若是有就直接導入
  2. 若是沒有,再搜索 系統目錄

在開發時,給文件起名,不要和 系統的模塊文件 重名測試

Python 中每個模塊都有一個內置屬性 __file__ 能夠 查看模塊 的 完整路徑

示例

import random # 生成一個 0~10 的數字 rand = random.randint(0, 10) print(rand) 

注意:若是當前目錄下,存在一個 random.py 的文件,程序就沒法正常執行了!

  • 這個時候,Python 的解釋器會 加載當前目錄 下的 random.py 而不會加載 系統的 random 模塊

1.4 原則 —— 每個文件都應該是能夠被導入的

  • 一個 獨立的 Python 文件 就是一個 模塊
  • 在導入文件時,文件中 全部沒有任何縮進的代碼 都會被執行一遍!

實際開發場景

  • 在實際開發中,每個模塊都是獨立開發的,大多都有專人負責
  • 開發人員 一般會在 模塊下方 增長一些測試代碼
    • 僅在模塊內使用,而被導入到其餘文件中不須要執行

__name__ 屬性

  • __name__ 屬性能夠作到,測試模塊的代碼 只在測試狀況下被運行,而在 被導入時不會被執行
  • __name__ 是 Python 的一個內置屬性,記錄着一個 字符串
  • 若是 是被其餘文件導入的__name__ 就是 模塊名
  • 若是 是當前執行的程序 __name__ 是 __main__

在不少 Python 文件中都會看到如下格式的代碼

# 導入模塊 # 定義全局變量 # 定義類 # 定義函數 # 在代碼的最下方 def main(): # ... pass # 根據 __name__ 判斷是否執行下方代碼 if __name__ == "__main__": main() 

02. 包(Package)

概念

  •  是一個 包含多個模塊 的 特殊目錄
  • 目錄下有一個 特殊的文件 __init__.py
  • 包名的 命名方式 和變量名一致,小寫字母 + _

好處

  • 使用 import 包名 能夠一次性導入  中 全部的模塊

案例演練

  1. 新建一個 hm_message 的 
  2. 在目錄下,新建兩個文件 send_message 和 receive_message
  3. 在 send_message 文件中定義一個 send 函數
  4. 在 receive_message 文件中定義一個 receive 函數
  5. 在外部直接導入 hm_message 的包

__init__.py

  • 要在外界使用  中的模塊,須要在 __init__.py 中指定 對外界提供的模塊列表
# 從 當前目錄 導入 模塊列表 from . import send_message from . import receive_message 

03. 發佈模塊(知道)

  • 若是但願本身開發的模塊,分享 給其餘人,能夠按照如下步驟操做

3.1 製做發佈壓縮包步驟

1) 建立 setup.py

  • setup.py 的文件
from distutils.core import setup setup(name="hm_message", # 包名 version="1.0", # 版本 description="itheima's 發送和接收消息模塊", # 描述信息 long_description="完整的發送和接收消息模塊", # 完整描述信息 author="itheima", # 做者 author_email="itheima@itheima.com", # 做者郵箱 url="www.itheima.com", # 主頁 py_modules=["hm_message.send_message", "hm_message.receive_message"]) 

有關字典參數的詳細信息,能夠參閱官方網站:

https://docs.python.org/2/distutils/apiref.html

2) 構建模塊

$ python3 setup.py build

3) 生成發佈壓縮包

$ python3 setup.py sdist

注意:要製做哪一個版本的模塊,就使用哪一個版本的解釋器執行!

3.2 安裝模塊

$ tar -zxvf hm_message-1.0.tar.gz $ sudo python3 setup.py install 

卸載模塊

直接從安裝目錄下,把安裝模塊的 目錄 刪除就能夠

$ cd /usr/local/lib/python3.5/dist-packages/ $ sudo rm -r hm_message* 

3.3 pip 安裝第三方模塊

  • 第三方模塊 一般是指由 知名的第三方團隊 開發的 而且被 程序員普遍使用 的 Python 包 / 模塊
    • 例如 pygame 就是一套很是成熟的 遊戲開發模塊
  • pip 是一個現代的,通用的 Python 包管理工具
  • 提供了對 Python 包的查找、下載、安裝、卸載等功能

安裝和卸載命令以下:

# 將模塊安裝到 Python 2.x 環境 $ sudo pip install pygame $ sudo pip uninstall pygame # 將模塊安裝到 Python 3.x 環境 $ sudo pip3 install pygame $ sudo pip3 uninstall pygame 

在 Mac 下安裝 iPython

$ sudo pip install ipython

在 Linux 下安裝 iPython

$ sudo apt install ipython
$ sudo apt install ipython3
相關文章
相關標籤/搜索