python中包和模塊概述

image.png

python中的包和模塊是兩個(gè)不同的概念飘诗,模塊是具有某一個(gè)特定功能的代碼塊教藻,而包就是模塊的集合墓捻。用import來調(diào)用包和模塊。
python中的包和模塊交煞,首先是按照代碼的功能進(jìn)行整理整合咏窿,將相似功能的代碼/大量代碼 整理到一起 方便統(tǒng)一管理

模塊(module):python中每個(gè)python文件就是一個(gè)模塊(模塊名稱就是文件名稱),每個(gè)python文件中素征,封裝類似功能的變量集嵌、函數(shù)、類型等等御毅,可以被其他的python模塊通過import關(guān)鍵字引入重復(fù)使用根欧!

包(pakcage)(文件夾):包含多個(gè)python文件/模塊的文件夾,并且文件夾中有一個(gè)名稱為init.py的特殊聲明文件端蛆,那么這個(gè)文件夾就是一個(gè)包(模塊包)凤粗,可以將大量功能相關(guān)的python模塊包含起來統(tǒng)一管理,同樣也可以被其他模塊通過import關(guān)鍵字引入重復(fù)使用封裝的模塊和代碼今豆!
?具體的調(diào)用方法有兩個(gè):1.import直接加包或者模塊的名字
2.是通過from調(diào)用
第一種方法就不再過多解釋重點(diǎn)說一下第二種方法:

1.from . import xxx # 從當(dāng)前模塊路徑下嫌拣,引入xxx模塊

2.from .. import xxx # 從當(dāng)前模塊的父級(jí)路徑下,引入xxx模塊

3.from pkg import module # 從 pkg包中引入一個(gè)模塊module

4.from pkg.module import vars, func, clazz# 從指定的模塊中直接引入

REMARK:from xx import 語法方式呆躲,主要是針對(duì)出現(xiàn)了包結(jié)構(gòu)的python代碼而特定的代碼引入方式异逐,首先要非常明確代碼的組織結(jié)構(gòu)才能正確使用from import語法進(jìn)行代碼的引入和復(fù)用
REMARK2:通過上述代碼,可以看到form import語法區(qū)分為兩種操作
使用了./..的相對(duì)路徑的引入操作方式
直接使用包/模塊名稱的絕對(duì)引入操作方式

1.2.2.from import 相對(duì)引入
首先歼秽,相對(duì)引入本身是相對(duì)當(dāng)前正在操作的文件的路徑
同一級(jí)路徑使用符號(hào):.
上一級(jí)路徑使用符號(hào):..

創(chuàng)建測(cè)試項(xiàng)目文件夾demo02/
項(xiàng)目中創(chuàng)建一個(gè)工具模塊:utils.py
# coding:utf-8
# 測(cè)試變量
test_msg = “hello”
# 測(cè)試函數(shù)
def test_func():
print(“test 函數(shù)操作”)
# 測(cè)試類型
class Test:
    pass

項(xiàng)目中創(chuàng)建主測(cè)試模塊:main.py
# 模塊的相對(duì)引入
from . import utils
# 測(cè)試變量
print(utils.test_msg)
# 測(cè)試函數(shù)
utils.test_func()
# 測(cè)試類型
t = utils.Test()

包的引入可以通過相對(duì)路徑直接操作应役,這里的demo02/可以是python的包情组,也可以是一個(gè)普通包含
python代碼的文件夾燥筷。

但是需要注意的是,一旦使用相對(duì)路徑院崇,就要明確所謂相對(duì)路徑~是依賴他們所屬的父級(jí)文件夾確定的肆氓,
就類似生活中的兄弟姐妹的稱謂一樣,是相對(duì)他們的父親來說的底瓣,所以運(yùn)行代碼需要在demo02/文件夾
所在路徑谢揪,執(zhí)行如下命令運(yùn)行
# 命令行執(zhí)行運(yùn)行代碼的命令蕉陋,告訴python解釋器在執(zhí)行指定路徑中的python代碼
python –m demo02.main
REMARK:如果直接在demo02/文件夾中,執(zhí)行命令
python main.py  就會(huì)出現(xiàn)如下錯(cuò)誤
ImportError:cannot import name ‘utils’
1.2.3.from import 絕對(duì)引入
絕對(duì)引入操作方式比較直接拨扶,從最外層的包的源頭直接開始操作凳鬓;
如:from pygame import K_A, K_S, K_D, K_W

這種操作方式在第三方模塊的操作中是司空見慣的,但是在獨(dú)立的項(xiàng)目開發(fā)中使用較少患民!
還是上面那個(gè)案例操作缩举,修改main.py代碼如下:
# 相對(duì)引入操作
# from . import utils
# 絕對(duì)引入操作
from demo02 import utils

# 使用utils中的變量、函數(shù)匹颤、類型等等..

運(yùn)行操作方式當(dāng)然和前面講過的類似仅孩,既然你確定了項(xiàng)目是從demo02/為最外層文件夾的話,那么
運(yùn)行也是參考demo02來執(zhí)行命令
python –m demo02.main

包:發(fā)布操作
?標(biāo)準(zhǔn)化構(gòu)建:將開發(fā)的代碼文件按照標(biāo)準(zhǔn)的格式進(jìn)行組織管理
?打包壓縮:將構(gòu)建好的代碼文件印蓖,打包壓縮到一個(gè)文件中辽慕,方便管理使用
?發(fā)布:將自己開發(fā)好的程序,經(jīng)過打包之后赦肃,發(fā)布到官方模塊管理標(biāo)準(zhǔn)網(wǎng)站中溅蛉!
?其他開發(fā)人員~在聯(lián)網(wǎng)的情況下:pip install 你的名字

1.5.1.本地發(fā)布
在我們已經(jīng)開發(fā)好的一個(gè)包文件夾下,創(chuàng)建一個(gè)python模塊:setup.py
模塊中定義如下內(nèi)容
# 引入構(gòu)建包信息的模塊
from distutils.core import setup
# 定義發(fā)布的包文件的信息
setup(
name=“damu_pkg01”,  # 發(fā)布的包文件名稱
version=”1.0”,   # 發(fā)布的包的版本序號(hào)
description=”我的測(cè)試包”, # 發(fā)布包的描述信息
author=”大牧莫邪”,   # 發(fā)布包的作者信息
author_email=”damu@163.com”, # 作者聯(lián)系郵箱信息
py_modules=[‘__init__.py’,’..’,..]# 發(fā)布的包中的模塊文件列表
)

執(zhí)行當(dāng)前程序包文件的構(gòu)建操作命令:按照標(biāo)準(zhǔn)格式組織包中的所有數(shù)據(jù)文件
python setup.py build
REMARK:構(gòu)建完畢的文件
可以通過python setup.py install命令直接當(dāng)成第三方模塊進(jìn)行安裝

執(zhí)行命令進(jìn)行包的打包發(fā)布
python setup.py sdist
REMARK:打包的文件他宛,主要是方便進(jìn)行網(wǎng)絡(luò)傳輸温艇,打包之后會(huì)在dist中創(chuàng)建包含包中所有信息的
tar.gz壓縮包文件;該文件就可以通過git等方式提交給對(duì)應(yīng)的開源組織發(fā)布你的自定義模塊了堕汞!

在本地發(fā)布過之后勺爱,要是發(fā)布到網(wǎng)站上,就再執(zhí)行一條命令就可以了:

twine upload dist/*

執(zhí)行過這條命令后要是別的主機(jī)相使用這個(gè)模塊讯检,就可以直接在網(wǎng)站上下載琐鲁,網(wǎng)站是http://pypi.python.org/pypi。另外特別需要注意的是要是打包圖片或者M(jìn)P3文件時(shí)人灼,就需要在文件下添加一個(gè)文件MANIFEST.in围段,然后在文件里面添加:

recursive-include 圖片或MP3文件名稱 *

然后開始執(zhí)行發(fā)布操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末投放,一起剝皮案震驚了整個(gè)濱河市奈泪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌灸芳,老刑警劉巖涝桅,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異烙样,居然都是意外死亡冯遂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門谒获,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛤肌,“玉大人壁却,你說我怎么就攤上這事÷阕迹” “怎么了展东?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)炒俱。 經(jīng)常有香客問我琅锻,道長(zhǎng),這世上最難降的妖魔是什么向胡? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任恼蓬,我火速辦了婚禮,結(jié)果婚禮上僵芹,老公的妹妹穿的比我還像新娘处硬。我一直安慰自己,他們只是感情好拇派,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布荷辕。 她就那樣靜靜地躺著,像睡著了一般件豌。 火紅的嫁衣襯著肌膚如雪疮方。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天茧彤,我揣著相機(jī)與錄音骡显,去河邊找鬼。 笑死曾掂,一個(gè)胖子當(dāng)著我的面吹牛惫谤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播珠洗,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼溜歪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了许蓖?” 一聲冷哼從身側(cè)響起蝴猪,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膊爪,沒想到半個(gè)月后自阱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚁飒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年动壤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萝喘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淮逻。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡琼懊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爬早,到底是詐尸還是另有隱情哼丈,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布筛严,位于F島的核電站醉旦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桨啃。R本人自食惡果不足惜车胡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望照瘾。 院中可真熱鬧匈棘,春花似錦、人聲如沸析命。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹃愤。三九已至簇搅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間软吐,已是汗流浹背瘩将。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凹耙,地道東北人鸟蟹。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像使兔,于是被迫代替她去往敵國(guó)和親建钥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容