1.什么是包剂公?
為了更加友好的對python代碼進(jìn)行組織管理,python中出現(xiàn)了包和模塊的概念吊宋,類似生活中整理我們的物品一樣纲辽,將代碼按照不同的功能進(jìn)行整理整合颜武,可以很大程度提升代碼可讀性和代碼質(zhì)量领猾,方便在項(xiàng)目中進(jìn)行協(xié)同開發(fā)锉试!
(1.)包(pakcage)(文件夾):包含對個(gè)python文件/模塊的文件夾嵌巷,并且文件夾中有一個(gè)名稱為init.py的特殊聲明文件桐腌,那么這個(gè)文件夾就是一個(gè)包(模塊包)宵膨,可以將大量功能相關(guān)的python模塊包含起來同意管理簇爆,同樣也可以被其他模塊通過import關(guān)鍵字引入重復(fù)使用封裝的模塊和代碼耿芹!
(2.)包和文件夾的區(qū)分
pyhton中的包诚啃,就是一個(gè)包含了init.py文件的特殊文件夾 其可以有效的管理和組織python中的模塊
普通文件夾 其實(shí)也是一種最簡單的(人工約定)包怠硼!沒有通過init.py聲明的包那么強(qiáng)大9砑!
2.什么是模塊
模塊(module):pyhton中每個(gè)python文件就是一個(gè)模塊(模塊名稱就是文件名稱)香璃,每個(gè)python文件中这难,封裝類似功能的變量、函數(shù)葡秒、類型等等姻乓,可以被其他的python模塊通過import關(guān)鍵字引入重復(fù)使用!
如果說模塊是具備一定功能的工具
那么包就是一個(gè)包含很多工具眯牧、功能強(qiáng)大的工具箱
3.導(dǎo)入操作
import 和 from .. import
包和模塊的引入蹋岩,通常有兩個(gè)關(guān)鍵語法
import 包/模塊
from 包/模塊 import 具體對象
(1.)基本語法
import 模塊
使用模塊中的數(shù)據(jù)
模塊.變量
模塊.函數(shù)
模塊.類型
import方式可以引入包、模塊学少;
import引入的包和模塊會(huì)自動(dòng)從當(dāng)前文件夾中剪个、系統(tǒng)環(huán)境變量PYTHONPATH中、以及系統(tǒng)的sys.path路徑中查詢是否存在該名稱的包/模塊
如果不存在版确,就會(huì)出現(xiàn)錯(cuò)誤:no module named ‘xxxxxx’
(2.)from xx import 方式
基本語法:
from . import xxx 從當(dāng)前模塊路徑下禁偎,引入xxx模塊
from .. import xxx 從當(dāng)前模塊的父級路徑下,引入xxx模塊
from pkg import module 從pkg包中引入一個(gè)模塊module
from pkg.module import vars阀坏, func , clazz 從指定的模塊中直接引用
REMARK:from xx import 語法方式笆檀,主要是針對出現(xiàn)了包結(jié)構(gòu)的python代碼而特定的代碼引入方式忌堂,首先要非常明確代碼的組織結(jié)構(gòu)才能正確使用from import語法進(jìn)行代碼的引入和復(fù)用
REMARK2:通過上述代碼,可以看到form import語法區(qū)分為兩種操作
使用了./..的相對路徑的引入操作方式
直接使用包/模塊名稱的絕對引入操作方式
(3.)from import 的相對引入
首先酗洒,相對引入本身是相對當(dāng)前正在操作的文件的路徑
同一級路徑使用符號(hào): .
上一級路徑使用符號(hào):..
但是需要注意的是士修,一旦使用相對路徑,就要明確所謂相對路徑樱衷,是依賴他們所屬文件夾確定的棋嘲,就類似生活中的兄弟姐妹的稱謂一樣,是相對他們的父親來說的矩桂,
所以在包和模塊的相對引入時(shí)沸移,一定要切記,引入的路徑相對于當(dāng)前文件;執(zhí)行的路徑相對于引入的最外層文件夾雹锣,這樣才能正確的使用相對引入操作執(zhí)行我們的模塊代碼网沾!
(4.)from import 的絕對引入
絕對引入的操作方式比較直接,從最外層的包的源頭直接開始操作蕊爵;這種操作方式在第三方模塊的操作中是司空見慣的辉哥,但是在獨(dú)立的項(xiàng)目開發(fā)中使用較少!
4.包的發(fā)布
(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=”我的測試包”, # 發(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
構(gòu)建完畢的文件:可以通過python setup.py install 命令直接當(dāng)還曾第三方模塊進(jìn)行安裝
#####執(zhí)行命令進(jìn)行包的打包發(fā)布
python setup.py sdist
打包的文件醋旦,主要是方便進(jìn)行網(wǎng)絡(luò)傳輸,打包之后會(huì)在dist中創(chuàng)建包含中所有信息的 tar.gz 壓縮包文件会放;該文件就可以git等方式提交給對應(yīng)的開源組織發(fā)布你的自定義模塊了饲齐!
(2.)網(wǎng)絡(luò)發(fā)布
首先,進(jìn)入http://pypi.python.org/pypi網(wǎng)站上鸦概,注冊一個(gè)自己的賬號(hào)吧箩张! 這個(gè)網(wǎng)站是目前大部分python第三方模塊集中的一個(gè)管理社區(qū)平臺(tái)
其次,你已經(jīng)準(zhǔn)備好了你自己的pyhton程序包窗市,并在包中準(zhǔn)備好了setup.py文件 在setup.py中先慷,已經(jīng)定義好了程序包的所有描述信息
執(zhí)行打包命令:
pyhton setup.py sdist
接下來 安裝第三方模塊:twine, 用于上傳我們打包的項(xiàng)目文件
pip install twine
上傳項(xiàng)目
twine upload dist/*
此時(shí)咨察,如果我們還需要我們自己開發(fā)的某個(gè)模塊的話论熙,直接通過pip命令安裝即可
pip install 包名稱/模塊名稱!