Python模塊、包和發(fā)布模塊示例代碼
1.模塊
1.1模塊的概念
模塊是python程序架構(gòu)的一個核心概念
- 每一個以擴(kuò)展名.py結(jié)尾的python源代碼文件都是一個模塊
- 模塊名同樣也是一個標(biāo)識符,需要符合標(biāo)識符的命名規(guī)則
- 在模塊中定義的全局變量、函數(shù)、類都是提供給外界直接使用的工具
- 模塊就好比工具包,要想使用這個工具包中的工具,就需要先導(dǎo)入這個模塊
1.2模塊的導(dǎo)入方式
1.2.1 import導(dǎo)入
import 模塊名1,模塊名2
提示:再導(dǎo)入模塊時,每個導(dǎo)入應(yīng)該獨占一行
import 模塊名1 import 模塊名2
導(dǎo)入之后
- 通過 模塊名.使用模塊提供的工具 -- 全局變量、函數(shù)、類
使用as指定模塊的別名
如果模塊的名字太長,可以使用as指定模塊的名稱,以方便在代碼中的使用
import 模塊名1 as 模塊別名
注意:模塊別名應(yīng)該符合大駝峰命名法
1.2.2 from...import導(dǎo)入
如果希望從某一個模塊中,導(dǎo)入部分工具,就可以使用from...import的方式
- import 模塊名 是一次性把模塊中所有工具全部導(dǎo)入,并且通過 模塊名/別名訪問
# 從 模塊 導(dǎo)入 某一個工具 from 模塊名1 import 工具名
導(dǎo)入之后
- 不需要通過 模塊名.
- 可以直接使用 模塊提供的工具 -- 全局變量、函數(shù)、類
注意
如果兩個模塊,存在同名的函數(shù),那么 后導(dǎo)入模塊的函數(shù),會覆蓋掉先導(dǎo)入的函數(shù)
- 開發(fā)時import代碼應(yīng)該統(tǒng)一寫在代碼的頂部,更容易及時發(fā)現(xiàn)沖突,一旦發(fā)現(xiàn)沖突,可以使用 as關(guān)鍵字 給其中一個工具起一個別名
1.2.3 from...import *(了解)
# 從 模塊 導(dǎo)入 所有工具 from 模塊名1 import *
注意
這種方式不推薦使用,因為函數(shù)重名并沒有任何提示,出現(xiàn)問題不好排查
1.3模塊的搜索順序(擴(kuò)展)
python的解釋器在導(dǎo)入模塊時,會:
- 搜索當(dāng)前目錄指定模塊名的文件,如果有就直接導(dǎo)入,如果沒有,再搜索系統(tǒng)目錄
在開發(fā)時,給文件起名,不要和系統(tǒng)的模塊文件重名
python中每一個模塊都有一個內(nèi)置屬性 __file__可以查看模塊的完整路徑
示例
import random print(random.__file__) # 生成一個 0-10 的數(shù)字 rand = random.randint(0,10) print(rand)
注意:如果當(dāng)前目錄下,存在一個random.py 的文件,程序就無法正常執(zhí)行了!
- 這個時候,python的解釋器會加載當(dāng)前目錄下的random.py 而不會加載系統(tǒng)的random模塊
1.4原則--每一個文件都應(yīng)該是可以被導(dǎo)入的
- 一個獨立的python文件就是一個模塊
- 在導(dǎo)入文件時,文件中 所有沒有任何縮進(jìn)的代碼 都會被執(zhí)行一遍
實際開發(fā)場景
- 在實際開發(fā)中,每一個模塊都是獨立開發(fā)的,大多都有專人負(fù)責(zé)
- 開發(fā)人員通常會在模塊下方增加一些測試代碼
僅在模塊內(nèi)使用,而被導(dǎo)入到其它文件中不需要執(zhí)行
__name__屬性
- __name__屬性可以做到,測試模塊的代碼 只在測試情況下被運(yùn)行,而在被導(dǎo)入時不會被執(zhí)行
- __name__是python的一個內(nèi)置屬性,記錄著一個字符串
- 如果 是被其它文件導(dǎo)入的,__name__就是模塊名
- 如果 是當(dāng)前執(zhí)行的程序__name__是__main__
# 導(dǎo)入模塊 # 定義全局變量 # 定義類 # 定義函數(shù) #在代碼的最下方 def main(): # ... pass # 根據(jù) __name__ 判斷是否執(zhí)行下方代碼 if __name__ == "__main__" main()
2.包(Package)
概念
包是一個包含多個模塊的特殊目錄,目錄下有一個特殊的文件 __init__.py,包名的命名方式和變量名一致,小寫字母+_
- __init__.py的建立方式
利用Directory建立包,需要自己新建__init__.py文件
利用Pyhon.Package建立包,會自動產(chǎn)生__init__.py文件
好處
- 使用 import 包名 可以一次性導(dǎo)入包中所有的模塊
案例演練
- 新建一個 hm_message 的包
- 在目錄下,新建兩個文件 send_message和receive_message
- 在send_message文件中定義一個send函數(shù)
- 在receive_message文件中定義一個receive函數(shù)
- 在外部直接導(dǎo)入 hm_message的包
__init__.py
要在外界使用包中的模塊,需要在__init__.py中指定對外界提供的模塊列表
# 從 當(dāng)前目錄 導(dǎo)入 模塊列表 from . import send_message from . import receive_message
3.發(fā)布模塊(了解)
如果希望自己開發(fā)的模塊,分享給其他人,可以按照以下步驟操作
3.1制作發(fā)布壓縮包步驟
創(chuàng)建setup.py的文件
from distutils.core import setup setup(name="hm_message", # 包名 version="1.0", # 版本 description="itheima's 發(fā)送和接收消息模塊", # 描述信息 long_description="完整的發(fā)送和接收消息模塊", # 完整描述信息 author="itheima", # 作者 author_email="itheima@itheima.com", # 作者郵箱 url="www.itheima.com", # 主頁 py_modules=["hm_message.send_message", "hm_message.receive_message"])
有關(guān)字典參數(shù)的詳細(xì)信息,可以參閱官方網(wǎng)站:
https://docs.python.org/2/distutils/apiref.html
構(gòu)建模塊
$ python3 setup.py build
生成發(fā)布壓縮包
注意:要制作哪個版本的模塊,就使用哪個版本的解釋器執(zhí)行
$ python3 setup.py sdist
3.2安裝模塊
$ tar zxvf hm_message-1.0.tar.gz $ sudo python3 setup.py install
卸載模塊
直接從安裝目錄下,把安裝模塊的目錄刪除就可以
$ cd /root/anaconda3/lib/python3.9/site-packages/ sudo rm -rf hm_message*
3.3 pip安裝第三方模塊
第三方模塊通常是指由 知名的第三方團(tuán)隊開發(fā)的 并且被程序員廣泛使用的python包/模塊
例如 pygame就是一套非常成熟的游戲開發(fā)模塊
pip是一個現(xiàn)代的、通用的python包管理工具
提供了對python包的查找、下載、安裝、卸載等功能
安裝和卸載命令如下:
sudo是指要以root的身份進(jìn)行執(zhí)行
# 將模塊安裝到 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
代碼見:https://github.com/x45w/python_mokuai_bao_fabumokuai.git
內(nèi)容總結(jié)于:https://space.bilibili.com/37974444
到此這篇關(guān)于Python模塊、包和發(fā)布模塊的文章就介紹到這了,更多相關(guān)Python模塊 包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python THREADING模塊中的JOIN()方法深入理解
這篇文章主要介紹了Python THREADING模塊中的JOIN()方法深入理解,本文用簡潔易懂的語言總結(jié)了對JOIN()方法的理解,不同于其它文章,需要的朋友可以參考下2015-02-02pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實現(xiàn)
這篇文章主要介紹了pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12python txt中的文件,逐行讀取并且每行賦值給變量問題
這篇文章主要介紹了python txt中的文件,逐行讀取并且每行賦值給變量問題,具有很好的參考價值,希望對大家有所幫助。2023-02-02對numpy的array和python中自帶的list之間相互轉(zhuǎn)化詳解
下面小編就為大家分享一篇對numpy的array和python中自帶的list之間相互轉(zhuǎn)化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04詳解如何使用Plotly和Dash進(jìn)行數(shù)據(jù)可視化
數(shù)據(jù)可視化是數(shù)據(jù)分析中至關(guān)重要的一環(huán),它能夠幫助我們更直觀地理解數(shù)據(jù)并發(fā)現(xiàn)隱藏的模式和趨勢,本文將介紹如何使用Plotly和Dash進(jìn)行數(shù)據(jù)可視化,感興趣的可以了解下2024-04-04