### 包管理工具 pip
在Python中,安裝第三方模塊,是通過包管理工具`pip`完成的。
如果你正在使用`Mac`或`Linux`,安裝`pip`本身這個步驟就可以跳過了。
如果你正在使用`Windows`,請參考安裝Python一節的內容,確保安裝時勾選了`pip`和`Add python.exe to Path`。
在命令提示符窗口下嘗試運行`pip`,如果`Windows`提示未找到命令,可以重新運行安裝程序添加`pip`。
注意:`Mac`或`Linux`上有可能并存`Python 3.x`和`Python 2.x`,因此對應的`pip`命令是`pip3`。
### 安裝模塊
現在,讓我們來安裝一個第三方庫——`Python Imaging Library`,這是Python下非常強大的處理圖像的工具庫。不過,`PIL`目前只支持到`Python 2.7`,并且有年頭沒有更新了,因此,基于`PIL`的`Pillow`項目開發非常活躍,并且支持最新的`Python 3`。
一般來說,第三方庫都會在`Python`官方的`pypi.python.org`網站注冊,要安裝一個第三方庫,必須先知道該庫的名稱,可以在官網或者`pypi`上搜索,比如`Pillow`的名稱叫`Pillow`,因此,安裝`Pillow`的命令就是:
~~~
pip install Pillow
~~~
耐心等待下載并安裝后,就可以使用`Pillow`了。
有了`Pillow`,處理圖片易如反掌。隨便找個圖片生成縮略圖:
~~~
>>> from PIL import Image
>>> im = Image.open('test.png')
>>> print(im.format, im.size, im.mode)
PNG (400, 300) RGB
>>> im.thumbnail((200, 100))
>>> im.save('thumb.jpg', 'JPEG')
~~~
其他常用的第三方庫還有`MySQL`的驅動:`mysql-connector-python`,用于科學計算的`NumPy`庫:`numpy`,用于生成文本的模板工具`Jinja2`,等等。
### 模塊搜索路徑
當我們試圖加載一個模塊時,Python會在指定的路徑下搜索對應的`.py`文件,如果找不到,就會報錯:
~~~
>>> import mymodule
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mymodule
~~~
默認情況下,Python解釋器會搜索當前目錄、所有已安裝的內置模塊和第三方模塊,搜索路徑存放在`sys`模塊的`path`變量中:
~~~
>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python34.zip', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages']
~~~
### 如何添加自己的搜索目錄
如果我們要添加自己的搜索目錄,有兩種方法:
一是直接修改`sys.path`,添加要搜索的目錄:
~~~
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')
~~~
這種方法是在運行時修改,運行結束后失效。
第二種方法是設置環境變量`PYTHONPATH`,該環境變量的內容會被自動添加到模塊搜索路徑中。設置方式與設置`Path`環境變量類似。注意只需要添加你自己的搜索路徑,Python自己本身的搜索路徑不受影響。
- Python教程
- Python簡介
- 安裝Python
- Python解釋器
- 第一個 Python 程序
- 使用文本編輯器
- Python代碼運行助手
- 輸入和輸出
- 源碼
- learning.py
- Python基礎
- 數據類型和變量
- 字符串和編碼
- 使用list和tuple
- 條件判斷
- 循環
- 使用dict和set
- 函數
- 調用函數
- 定義函數
- 函數的參數
- 遞歸函數
- 高級特性
- 切片
- 迭代
- 列表生成式
- 生成器
- 迭代器
- 函數式編程
- 高階函數
- map/reduce
- filter
- sorted
- 返回函數
- 匿名函數
- 裝飾器
- 偏函數
- Python函數式編程——偏函數(來自博客)
- 模塊
- 使用模塊
- 安裝第三方模塊
- 面向對象編程
- 類和實例
- 訪問限制
- 繼承和多態
- 獲取對象信息
- 實例屬性和類屬性
- 面向對象高級編程
- 使用__slots__
- 使用@property
- 多重繼承
- 定制類
- 使用枚舉類
- 使用元類
- 錯誤、調試和測試
- 錯誤處理
- 調試
- 單元測試
- 文檔測試
- IO編程
- 文件讀寫
- StringIO和BytesIO
- 操作文件和目錄
- 序列化
- 進程和線程
- 多進程
- 多線程
- ThreadLocal
- 進程 vs. 線程
- 分布式進程
- 正則表達式
- 常用內建模塊
- datetime
- collections
- base64
- struct
- hashlib
- itertools
- contextlib
- XML
- HTMLParser
- urllib
- 常用第三方模塊
- PIL
- virtualenv
- 圖形界面
- 網絡編程
- TCP/IP簡介
- TCP編程
- UDP編程
- 電子郵件
- SMTP發送郵件
- POP3收取郵件
- 訪問數據庫
- 使用SQLite
- 使用MySQL
- 使用SQLAlchemy
- Web開發
- HTTP協議簡介
- HTML簡介
- WSGI接口
- 使用Web框架
- 使用模板
- 異步IO
- 協程
- asyncio
- async/await
- aiohttp
- 實戰
- Day 1 - 搭建開發環境
- Day 2 - 編寫Web App骨架
- Day 3 - 編寫ORM
- Day 4 - 編寫Model
- Day 5 - 編寫Web框架
- Day 6 - 編寫配置文件
- Day 7 - 編寫MVC
- Day 8 - 構建前端
- Day 9 - 編寫API
- Day 10 - 用戶注冊和登錄
- Day 11 - 編寫日志創建頁
- Day 12 - 編寫日志列表頁
- Day 13 - 提升開發效率
- Day 14 - 完成Web App
- Day 15 - 部署Web App
- Day 16 - 編寫移動App
- FAQ
- 期末總結