Python模塊、包和發(fā)布模塊示例代碼
1.模塊
1.1模塊的概念
模塊是python程序架構(gòu)的一個(gè)核心概念
- 每一個(gè)以擴(kuò)展名.py結(jié)尾的python源代碼文件都是一個(gè)模塊
- 模塊名同樣也是一個(gè)標(biāo)識(shí)符,需要符合標(biāo)識(shí)符的命名規(guī)則
- 在模塊中定義的全局變量、函數(shù)、類都是提供給外界直接使用的工具
- 模塊就好比工具包,要想使用這個(gè)工具包中的工具,就需要先導(dǎo)入這個(gè)模塊
1.2模塊的導(dǎo)入方式
1.2.1 import導(dǎo)入
import 模塊名1,模塊名2
提示:再導(dǎo)入模塊時(shí),每個(gè)導(dǎo)入應(yīng)該獨(dú)占一行
import 模塊名1 import 模塊名2
導(dǎo)入之后
- 通過(guò) 模塊名.使用模塊提供的工具 -- 全局變量、函數(shù)、類
使用as指定模塊的別名
如果模塊的名字太長(zhǎng),可以使用as指定模塊的名稱,以方便在代碼中的使用
import 模塊名1 as 模塊別名
注意:模塊別名應(yīng)該符合大駝峰命名法
1.2.2 from...import導(dǎo)入
如果希望從某一個(gè)模塊中,導(dǎo)入部分工具,就可以使用from...import的方式
- import 模塊名 是一次性把模塊中所有工具全部導(dǎo)入,并且通過(guò) 模塊名/別名訪問(wèn)
# 從 模塊 導(dǎo)入 某一個(gè)工具 from 模塊名1 import 工具名
導(dǎo)入之后
- 不需要通過(guò) 模塊名.
- 可以直接使用 模塊提供的工具 -- 全局變量、函數(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è)別名
1.2.3 from...import *(了解)
# 從 模塊 導(dǎo)入 所有工具 from 模塊名1 import *
注意
這種方式不推薦使用,因?yàn)楹瘮?shù)重名并沒有任何提示,出現(xiàn)問(wèn)題不好排查
1.3模塊的搜索順序(擴(kuò)展)
python的解釋器在導(dǎo)入模塊時(shí),會(huì):
- 搜索當(dāng)前目錄指定模塊名的文件,如果有就直接導(dǎo)入,如果沒有,再搜索系統(tǒng)目錄
在開發(fā)時(shí),給文件起名,不要和系統(tǒng)的模塊文件重名
python中每一個(gè)模塊都有一個(gè)內(nèi)置屬性 __file__可以查看模塊的完整路徑
示例
import random print(random.__file__) # 生成一個(gè) 0-10 的數(shù)字 rand = random.randint(0,10) print(rand)
注意:如果當(dāng)前目錄下,存在一個(gè)random.py 的文件,程序就無(wú)法正常執(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ā)場(chǎng)景
- 在實(shí)際開發(fā)中,每一個(gè)模塊都是獨(dú)立開發(fā)的,大多都有專人負(fù)責(zé)
- 開發(fā)人員通常會(huì)在模塊下方增加一些測(cè)試代碼
僅在模塊內(nèi)使用,而被導(dǎo)入到其它文件中不需要執(zhí)行
__name__屬性
- __name__屬性可以做到,測(cè)試模塊的代碼 只在測(cè)試情況下被運(yùn)行,而在被導(dǎo)入時(shí)不會(huì)被執(zhí)行
- __name__是python的一個(gè)內(nèi)置屬性,記錄著一個(gè)字符串
- 如果 是被其它文件導(dǎo)入的,__name__就是模塊名
- 如果 是當(dāng)前執(zhí)行的程序__name__是__main__
# 導(dǎo)入模塊
# 定義全局變量
# 定義類
# 定義函數(shù)
#在代碼的最下方
def main():
# ...
pass
# 根據(jù) __name__ 判斷是否執(zhí)行下方代碼
if __name__ == "__main__"
main()2.包(Package)
概念
包是一個(gè)包含多個(gè)模塊的特殊目錄,目錄下有一個(gè)特殊的文件 __init__.py,包名的命名方式和變量名一致,小寫字母+_
- __init__.py的建立方式

利用Directory建立包,需要自己新建__init__.py文件
利用Pyhon.Package建立包,會(huì)自動(dòng)產(chǎn)生__init__.py文件
好處
- 使用 import 包名 可以一次性導(dǎo)入包中所有的模塊
案例演練
- 新建一個(gè) hm_message 的包
- 在目錄下,新建兩個(gè)文件 send_message和receive_message
- 在send_message文件中定義一個(gè)send函數(shù)
- 在receive_message文件中定義一個(gè)receive函數(shù)
- 在外部直接導(dǎo)入 hm_message的包
__init__.py
要在外界使用包中的模塊,需要在__init__.py中指定對(duì)外界提供的模塊列表
# 從 當(dāng)前目錄 導(dǎo)入 模塊列表 from . import send_message from . import receive_message
3.發(fā)布模塊(了解)
如果希望自己開發(fā)的模塊,分享給其他人,可以按照以下步驟操作
3.1制作發(fā)布?jí)嚎s包步驟
創(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", # 主頁(yè)
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ā)布?jí)嚎s包

注意:要制作哪個(gè)版本的模塊,就使用哪個(gè)版本的解釋器執(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)隊(duì)開發(fā)的 并且被程序員廣泛使用的python包/模塊
例如 pygame就是一套非常成熟的游戲開發(fā)模塊
pip是一個(gè)現(xiàn)代的、通用的python包管理工具
提供了對(duì)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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python THREADING模塊中的JOIN()方法深入理解
這篇文章主要介紹了Python THREADING模塊中的JOIN()方法深入理解,本文用簡(jiǎn)潔易懂的語(yǔ)言總結(jié)了對(duì)JOIN()方法的理解,不同于其它文章,需要的朋友可以參考下2015-02-02
Python代碼實(shí)現(xiàn)粒子群算法圖文詳解
這篇文章主要介紹了Python編程實(shí)現(xiàn)粒子群算法詳解,涉及粒子群算法的原理,過(guò)程,以及實(shí)現(xiàn)代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下2021-08-08
淺談django rest jwt vue 跨域問(wèn)題
這篇文章主要介紹了django rest jwt vue 跨域問(wèn)題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實(shí)現(xiàn)
這篇文章主要介紹了pytorch .detach() .detach_() 和 .data用于切斷反向傳播的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
python txt中的文件,逐行讀取并且每行賦值給變量問(wèn)題
這篇文章主要介紹了python txt中的文件,逐行讀取并且每行賦值給變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-02-02
對(duì)numpy的array和python中自帶的list之間相互轉(zhuǎn)化詳解
下面小編就為大家分享一篇對(duì)numpy的array和python中自帶的list之間相互轉(zhuǎn)化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
詳解如何使用Plotly和Dash進(jìn)行數(shù)據(jù)可視化
數(shù)據(jù)可視化是數(shù)據(jù)分析中至關(guān)重要的一環(huán),它能夠幫助我們更直觀地理解數(shù)據(jù)并發(fā)現(xiàn)隱藏的模式和趨勢(shì),本文將介紹如何使用Plotly和Dash進(jìn)行數(shù)據(jù)可視化,感興趣的可以了解下2024-04-04

