python模块和包(模块、包、发布模块)
模塊和包
目標(biāo)
- 模塊
- 包
- 發(fā)布模塊
01. 模塊
1.1 模塊的概念
模塊是 Python 程序架構(gòu)的一個(gè)核心概念
- 每一個(gè)以擴(kuò)展名?py?結(jié)尾的?Python?源代碼文件都是一個(gè)?模塊
- 模塊名?同樣也是一個(gè)?標(biāo)識符,需要符合標(biāo)識符的命名規(guī)則
- 在模塊中定義的?全局變量?、函數(shù)、類?都是提供給外界直接使用的?工具
- 模塊?就好比是?工具包,要想使用這個(gè)工具包中的工具,就需要先?導(dǎo)入?這個(gè)模塊
1.2 模塊的兩種導(dǎo)入方式
1)import 導(dǎo)入
import 模塊名1, 模塊名2提示:在導(dǎo)入模塊時(shí),每個(gè)導(dǎo)入應(yīng)該獨(dú)占一行
import 模塊名1 import 模塊名2- 導(dǎo)入之后
- 通過?模塊名.?使用?模塊提供的工具?——?全局變量、函數(shù)、類
使用?as?指定模塊的別名
如果模塊的名字太長,可以使用?as?指定模塊的名稱,以方便在代碼中的使用
import 模塊名1 as 模塊別名注意:模塊別名?應(yīng)該符合?大駝峰命名法
2)from...import 導(dǎo)入
- 如果希望?從某一個(gè)模塊?中,導(dǎo)入?部分?工具,就可以使用?from ... import?的方式
- import 模塊名?是?一次性?把模塊中?所有工具全部導(dǎo)入,并且通過?模塊名/別名?訪問
- 導(dǎo)入之后
- 不需要?通過?模塊名.
- 可以直接使用?模塊提供的工具?——?全局變量、函數(shù)、類
注意
如果?兩個(gè)模塊,存在?同名的函數(shù),那么?后導(dǎo)入模塊的函數(shù),會(huì)?覆蓋掉先導(dǎo)入的函數(shù)
- 開發(fā)時(shí)?import?代碼應(yīng)該統(tǒng)一寫在?代碼的頂部,更容易及時(shí)發(fā)現(xiàn)沖突
- 一旦發(fā)現(xiàn)沖突,可以使用?as?關(guān)鍵字?給其中一個(gè)工具起一個(gè)別名
from...import *(知道)
# 從 模塊 導(dǎo)入 所有工具 from 模塊名1 import *注意
這種方式不推薦使用,因?yàn)楹瘮?shù)重名并沒有任何的提示,出現(xiàn)問題不好排查
1.3 模塊的搜索順序[擴(kuò)展]
Python?的解釋器在?導(dǎo)入模塊?時(shí),會(huì):
在開發(fā)時(shí),給文件起名,不要和?系統(tǒng)的模塊文件?重名
Python?中每一個(gè)模塊都有一個(gè)內(nèi)置屬性?__file__?可以?查看模塊?的?完整路徑
示例
import random# 生成一個(gè) 0~10 的數(shù)字 rand = random.randint(0, 10)print(rand)注意:如果當(dāng)前目錄下,存在一個(gè)?random.py?的文件,程序就無法正常執(zhí)行了!
- 這個(gè)時(shí)候,Python?的解釋器會(huì)?加載當(dāng)前目錄?下的?random.py?而不會(huì)加載?系統(tǒng)的?random?模塊
1.4 原則 —— 每一個(gè)文件都應(yīng)該是可以被導(dǎo)入的
- 一個(gè)?獨(dú)立的?Python?文件?就是一個(gè)?模塊
- 在導(dǎo)入文件時(shí),文件中?所有沒有任何縮進(jìn)的代碼?都會(huì)被執(zhí)行一遍!
實(shí)際開發(fā)場景
- 在實(shí)際開發(fā)中,每一個(gè)模塊都是獨(dú)立開發(fā)的,大多都有專人負(fù)責(zé)
- 開發(fā)人員?通常會(huì)在?模塊下方?增加一些測試代碼
- 僅在模塊內(nèi)使用,而被導(dǎo)入到其他文件中不需要執(zhí)行
__name__?屬性
- __name__?屬性可以做到,測試模塊的代碼?只在測試情況下被運(yùn)行,而在?被導(dǎo)入時(shí)不會(huì)被執(zhí)行!
- __name__?是?Python?的一個(gè)內(nèi)置屬性,記錄著一個(gè)?字符串
- 如果?是被其他文件導(dǎo)入的,__name__?就是?模塊名
- 如果?是當(dāng)前執(zhí)行的程序?__name__?是?__main__
在很多?Python?文件中都會(huì)看到以下格式的代碼:
# 導(dǎo)入模塊 # 定義全局變量 # 定義類 # 定義函數(shù)# 在代碼的最下方 def main(): # ... pass # 根據(jù) __name__ 判斷是否執(zhí)行下方代碼 if __name__ == "__main__": main()02. 包(Package)
概念
- 包?是一個(gè)?包含多個(gè)模塊?的?特殊目錄
- 目錄下有一個(gè)?特殊的文件?__init__.py
- 包名的?命名方式?和變量名一致,小寫字母?+?_
好處
- 使用?import 包名?可以一次性導(dǎo)入?包?中?所有的模塊
案例演練
__init__.py
- 要在外界使用?包?中的模塊,需要在?__init__.py?中指定?對外界提供的模塊列表
03. 發(fā)布模塊(知道)
- 如果希望自己開發(fā)的模塊,分享?給其他人,可以按照以下步驟操作
3.1 制作發(fā)布壓縮包步驟
1) 創(chuàng)建 setup.py
- setup.py?的文件
有關(guān)字典參數(shù)的詳細(xì)信息,可以參閱官方網(wǎng)站:
https://docs.python.org/2/distutils/apiref.html
2) 構(gòu)建模塊
$ python3 setup.py build3) 生成發(fā)布壓縮包
$ python3 setup.py sdist注意:要制作哪個(gè)版本的模塊,就使用哪個(gè)版本的解釋器執(zhí)行!
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?安裝第三方模塊
- 第三方模塊?通常是指由?知名的第三方團(tuán)隊(duì)?開發(fā)的?并且被?程序員廣泛使用?的?Python?包 / 模塊
- 例如?pygame?就是一套非常成熟的?游戲開發(fā)模塊
- pip?是一個(gè)現(xiàn)代的,通用的?Python?包管理工具
- 提供了對?Python?包的查找、下載、安裝、卸載等功能
安裝和卸載命令如下:
# 將模塊安裝到 Python 2.x 環(huán)境 $ sudo pip install pygame $ sudo pip uninstall pygame# 將模塊安裝到 Python 3.x 環(huán)境 $ sudo pip3 install pygame $ sudo pip3 uninstall pygame在?Mac?下安裝?iPython
$ sudo pip install ipython在?Linux?下安裝?iPython
$ sudo apt install ipython $ sudo apt install ipython3轉(zhuǎn)載于:https://www.cnblogs.com/xiangribai/p/8594396.html
總結(jié)
以上是生活随笔為你收集整理的python模块和包(模块、包、发布模块)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iaisowanttosendanema
- 下一篇: python 的基础 学习 第七天