[TOC]
## 模塊概念
### 什么是模塊
為了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件里,這樣,每個文件包含的代碼就相對較少,在Python中,一個.py文件就稱之為一個模塊(Module)。
### 使用模塊有什么好處?
最大的好處是大大提高了代碼的可維護性。其次,編寫代碼不必從零開始。當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程序的時候,也經常引用其他模塊,包括Python內置的模塊和來自第三方的模塊。
使用模塊還可以避免函數名和變量名沖突。每個模塊有獨立的命名空間,因此相同名字的函數和變量完全可以分別存在不同的模塊中,所以,我們自己在編寫模塊時,不必考慮名字會與其他模塊沖突
### 模塊分類
模塊分為三種:
* 內置標準模塊
又稱標準庫,執行help('modules')查看所有python自帶模塊列表
* 第三方開源模塊,可通過pip install 模塊名 聯網安裝
* 自定義模塊
### 模塊調用
```python
import module
from module import xx
from module.xx.xx import xx as rename
from module.xx.xx import *
```
> 注意:模塊一旦被調用,即相當于執行了另外一個py文件里的代碼
### 自定義模塊
創建一個.py文件,就可以稱之為模塊,就可以在另外一個程序里導入
### 模塊查找路徑
```python
>>> import sys
>>> print(sys.path)
['C:\\Program Files\\JetBrains\\PyCharm Community Edition 2018.2.1\\helpers\\pydev', 'C:\\Program Files\\JetBrains\\PyCharm Community Edition 2018.2.1\\helpers\\pydev', 'C:\\Program Files\\Python36\\python36.zip', 'C:\\Program Files\\Python36\\DLLs', 'C:\\Program Files\\Python36\\lib', 'C:\\Program Files\\Python36', 'C:\\Program Files\\Python36\\lib\\site-packages', 'D:\\data\\my_python', 'D:/data/my_python']
```
python解釋器會按照上面列表順序去依次到每個目錄下去匹配你要導入的模塊名,只要在一個目錄下匹配到了該模塊名,就立刻導入,不再繼續往后找,
當前目錄最優先,所以自己定義的模塊在當前目錄會被優先導入。
### 開源模塊安裝
python的開源模塊庫:(https://pypi.python.org/pypi),如何從這個平臺上下載代碼呢?
1. 在線安裝
* 通過pip用官方源在線安裝
`pip3 install paramiko #paramiko 是模塊名`
pip命令會自動下載模塊包并完成安裝。
* 通過pip用國內源在線安裝
`pip install -i http://pypi.douban.com/simple/ paramiko --trusted-host pypi.douban.com`
2. 離線安裝
* 下載源碼安裝
直接在上面這個頁面搜索需要的模塊,找到后上點download,下載后,解壓并進入目錄,執行以下命令完成安裝
`python setup.py build #先編譯源碼`
`python setup.py install #再安裝源碼`
* 通過pip命令離線安裝
國內網絡不好或者環境不能上網的情況下,可以下載好對應的壓縮包,然后通過pip3離線安裝
`pip3 install paramiko-2.4.2.tar.gz`
3. 安裝的位置
軟件一般會被自動安裝你python安裝目錄的`site-packages`子目錄里,如windows中的安裝位置是`C:\Program Files\Python36\Lib\site-packages`
## 包(Package)的概念
### 單級包
當模塊文件越來越多,就需要對模塊文件進行劃分,比如把負責跟數據庫交互的都放一個文件夾,把與頁面交互相關的放一個文件夾,Python引入了按目錄來組織模塊的方法,稱為包(Package)。
比如mycompany,按照如下目錄存放:
```
mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py
```
abc.py模塊的名字就變成了mycompany.abc,xyz.py的模塊名變成了mycompany.xyz。
### 注意事項:
請注意,每一個包目錄下面都會有一個__init__.py的文件,這個文件是必須存在的,否則,Python就把這個目錄當成普通目錄,而不是一個包。__init__.py可以是空文件,也可以有Python代碼,因為__init__.py本身就是一個模塊,而它的模塊名就是mycompany。
文件夾被python解釋器視作package需要滿足兩個條件:
* 文件夾中必須有__init__.py文件,該文件可以為空,但必須存在該文件。
* 不能作為頂層模塊來執行該文件夾中的py文件(即不能作為主函數的入口)。
### 多級包
類似的,可以有多級目錄,組成多級層次的包結構。比如如下的目錄結構:
```
mycompany
├─ __init__.py
├─ web
│ ├─ __init__.py
│ ├─ utils.py
│ └─ www.py
├─ abc.py
└─ xyz.py
```
文件www.py的模塊名就是mycompany.web.www
>自建模塊時要注意命名,不能和Python自帶的模塊名稱沖突。例如,系統自帶了sys模塊,自己的模塊就不可命名為sys.py,否則將無法導入系統自帶的sys模塊。
## 總結
模塊是一組Python代碼的集合,可以使用其他模塊,也可以被其他模塊使用。
模塊名要遵循Python變量命名規范,不要使用中文、特殊字符;
模塊名不要和系統模塊名沖突,最好先查看系統是否已存在該模塊,檢查方法是在Python交互環境執行import abc,若成功則說明系統存在此模塊。
- 基礎部分
- 基礎知識
- 變量
- 數據類型
- 數字與布爾詳解
- 列表詳解list
- 字符串詳解str
- 元組詳解tup
- 字典詳解dict
- 集合詳解set
- 運算符
- 流程控制與循環
- 字符編碼
- 編的小程序
- 三級菜單
- 斐波那契數列
- 漢諾塔
- 文件操作
- 函數相關
- 函數基礎知識
- 函數進階知識
- lambda與map-filter-reduce
- 裝飾器知識
- 生成器和迭代器
- 琢磨的小技巧
- 通過operator函數將字符串轉換回運算符
- 目錄規范
- 異常處理
- 常用模塊
- 模塊和包相關概念
- 絕對導入&相對導入
- pip使用第三方源
- time&datetime模塊
- random隨機數模塊
- os 系統交互模塊
- sys系統模塊
- shutil復制&打包模塊
- json&pickle&shelve模塊
- xml序列化模塊
- configparser配置模塊
- hashlib哈希模塊
- subprocess命令模塊
- 日志logging模塊基礎
- 日志logging模塊進階
- 日志重復輸出問題
- re正則表達式模塊
- struct字節處理模塊
- abc抽象類與多態模塊
- requests與urllib網絡訪問模塊
- 參數控制模塊1-optparse-過時
- 參數控制模塊2-argparse
- pymysql數據庫模塊
- requests網絡請求模塊
- 面向對象
- 面向對象相關概念
- 類與對象基礎操作
- 繼承-派生和組合
- 抽象類與接口
- 多態與鴨子類型
- 封裝-隱藏與擴展性
- 綁定方法與非綁定方法
- 反射-字符串映射屬性
- 類相關內置方法
- 元類自定義及單例模式
- 面向對象的軟件開發
- 網絡-并發編程
- 網絡編程SOCKET
- socket簡介和入門
- socket代碼實例
- 粘包及粘包解決辦法
- 基于UDP協議的socket
- 文件傳輸程序實戰
- socketserver并發模塊
- 多進程multiprocessing模塊
- 進程理論知識
- 多進程與守護進程
- 鎖-信號量-事件
- 隊列與生產消費模型
- 進程池Pool
- 多線程threading模塊
- 進程理論和GIL鎖
- 死鎖與遞歸鎖
- 多線程與守護線程
- 定時器-條件-隊列
- 線程池與進程池(新方法)
- 協程與IO模型
- 協程理論知識
- gevent與greenlet模塊
- 5種網絡IO模型
- 非阻塞與多路復用IO實現
- 帶著目標學python
- Pycharm基本使用
- 爬蟲
- 案例-爬mzitu美女
- 案例-爬小說
- beautifulsoup解析模塊
- etree中的xpath解析模塊
- 反爬對抗-普通驗證碼
- 反爬對抗-session登錄
- 反爬對抗-代理池
- 爬蟲技巧-線程池
- 爬蟲對抗-圖片懶加載
- selenium瀏覽器模擬