[TOC]
<br>
### python中的模塊
python被稱為一種膠水語言,開源眾多的實用模塊,是python廣受歡迎的原因之一,畢竟我們大多開發者都是語言的運用者而不是創造者,對于我們普通開發者,重復的造輪子并不是一種可取的方式,有現成的模塊,直接運用,主要在處理我們的業務邏輯,豈不快哉!
>[info] 從邏輯上組織代碼,將一些有聯系,完成特定功能相關的代碼組織在一起,這些自我包含并且有組織的代碼片段就是模塊,將其他模塊中屬性附加到你的模塊的操作叫做導入。
>
>那些一個或多個.py文件組成的代碼集合就稱為模塊。如:os 是系統相關的模塊;file是文件操作相關的模塊
>
**模塊分為三種**:
- 內置標準模塊(標準庫)
- 開源模塊
- 自定義模塊
#### 內置標準模塊
顧名思義,安裝python時,就已經幫我們安裝上這些模塊了,這些模塊是python內置的基礎模塊。常用的標準庫,主要有:
操作系統模塊:`os`
命令行參數模塊:`sys`
字符串正則模塊:`re`
數學模塊:`math`,`random`
時間模塊:`datetime`,`time`
序列化模塊:`json`,`pickle`,`shelve`
加解密模塊:`hashlib`
網絡模塊:`urllib.request`, `smtplib`
進程模塊:`subprocess`
日志模塊:`logging`
文件通配符模塊:`glob`
數據壓縮模塊:`zlib`,`gzip`,`bz2`,`zipfile`,`tarfile`
性能度量模塊:`timeit`
...
這些模塊,后面會有專門的一篇文章介紹常用的使用,這里主要目的是告訴我們,這些模塊可以直接使用,不需要額外去安裝。
這些模塊不妨可以去python安裝目錄下的**Lib文件夾**下面去找找看?參考我的內置模塊目錄是:*D:\Python36\Lib*
#### 開源(第三方)模塊
在python的開源模塊管理上,存在著一個叫PyPI(Python Package Index)的倉庫,開發者可以將自行封裝好的模塊發布到倉庫上,實現代碼開源共享。如果您開發出什么好用的模塊,您也可以發布上去,讓其他人安裝使用哦!
PyPI官網:[https://pypi.org/](https://pypi.org/)

#####安裝第三方模塊
######從PyPI中安裝第三方模塊
開源模塊被發布到了PyPI倉庫后,便可以通過命令pip進行模塊的安裝了。
這里已后面課程中重點介紹的`requests`模塊為例,了解第三方模塊安裝與卸載
**安裝requests模塊的最新版本**
```cmd
pip install requests
```
**安裝requests模塊的指定版本**
```cmd
pip install requests==2.18.4
```
**升級requests模塊**
```cmd
pip install --upgrade requests
```
**查看requests模塊信息**
```cmd
pip show requests
```
**通過requirements.txt文件批量安裝依賴模塊**
如果您仔細去留意github上一些優秀的項目,在根目錄中都會存在一個名字叫`requirements.txt`的文件,這個文件中會列出當前項目需要依賴的第三方模塊,使用者直接通過這個文件,一次性安裝所有依賴模塊
```cmd
pip install -r requirements.txt
```
###### 從源碼中安裝第三方模塊
1. 下載源碼
2. 解壓源碼
3. 進入目錄
4. 編譯源碼 `python setup.py build`
5. 安裝源碼 `python setup.py install`
##### 列出所有已安裝第三方模塊
```cmd
pip list
```
##### 卸載第三方模塊
**卸載requests模塊**
```cmd
pip uninstall requests
```
#### 自定義模塊
一個或多個.py文件組成的代碼集合,便是一個模塊。
這里,已一個小實例講解,請耐心閱讀。定義的目錄結構如下:
```
└─module_test
│ m1.py
│ test.py
│
└─m2
m2_chat.py
m2_shopping.py
__init__.py
```
`m1.py` 代碼
```python
def say_hello(name=None):
return "Hello:%s" % name
```
`m2_chat.py`代碼
```python
def chat(_from, _to, message):
print "%s tell %s something about %s" % (_from, _to, message)
```
`m2_shopping`代碼
```python
def shopping(sb, something):
print "%s is buying %s" % (sb, something)
```
`m2/__init__.py`代碼
```python
from m2_shopping import *
```
`test.py`代碼
```python
import m1
import m2
from m1 import say_hello
from m2.m2_chat import chat
print m1.say_hello("Milton")
m2.shopping("Milton", "dog")
print say_hello("Milton")
chat("Milton", "Cherish", "Love")
```
**運行`test.py`輸出結果:**
```cmd
Hello:Milton
Hello:Milton
Milton tell Cherish something about Love
Milton is buying dog
```
如上,m1 m2都可認為是一個模塊,m1模塊由一個m1.py文件組成,m2模塊由m2_chat.py,m2_shopping.py,\__init__.py 三個文件組成。
### 導入模塊
>導入一個模塊的方式有:
>- `import` \<module_name> 導入一個模塊,可通過module_name.\<function_name>引用模塊中的屬性。
>
>- `from` \<module_name> `import` \<function_name>,從一個模塊中導入具體某個屬性,可直接使用function_name
以前面自定義模塊為例,在 `test.py` 中:
`import m1` 后,可以運行 m1.say_hello("Milton"),通過m1.xx 可以運行 `m1.py `中定義的函數或屬性;
`import m2` 后,(注意,m2目錄下的\__init__.py 中,聲明了 from m2_shopping import *),此時m2可以直接引用m2目錄下的m2_shopping 中的所有函數或屬性,如m2.shopping("Milton","dog")
`from m1 import say_hello` 后,在當前名稱空間可以直接使用say_hello,如 say_hello("Milton").
`from m2.m2_chat import chat` 后,可以在當前名稱空間直接使用chat,如chat("Milton","Cherish","Love")
### 發布自己開發的模塊
<略,自行百度吧,小編自己都還沒發布過開源模塊呢!>
<hr style="margin-top:100px">
:-: 
***微信掃一掃,關注“python測試開發圈”,了解更多測試教程!***
- 前言
- chapter01_開發環境
- chapter02_字符串的使用
- chapter03_列表的使用
- chapter04_字典的使用
- chapter05_數字的使用
- chapter06_元組的使用
- chapter07_集合的使用
- chapter08_輸入輸出
- chapter09_控制流程
- chapter10_實例練習_登錄1
- chapter11_python函數入門
- chapter12_python中的類
- chapter13_輕松玩轉python中的模塊管理
- chapter14_掌握學習新模塊的技巧
- chapter15_通過os模塊與操作系統交互
- chapter16_子進程相關模塊(subprocess)
- chapter17_時間相關模塊(time & datetime)
- chapter18_序列化模塊(json)
- chapter19_加密模塊(hashlib)
- chapter20_文件的讀與寫
- chapter21_階段考核2_登錄
- chapter22_小小算法挑戰(排序&二分法)
- chapter23_用多線程來搞事!
- chapter24_HTTP接口請求(requests)
- chapter25_接口測試框架(pytest)
- chapter26_階段考核3_HTTP接口測試
- chapter27_HTML解析(pyquery)
- chapter28_階段考核4_爬蟲下載網易汽車
- chapter29_python中的那些編碼坑
- chapter30_MySQL數據庫操作
- chapter31 高級特性_迭代器與生成器
- chapter32 高級特性_裝飾器
- chapter33 高級特性_列表處理