<style> .red { color: red; } .blue{ color: blue; } .green{ color: green; } </style> # 模組與套件 ## 11-1 模組(module) - <span class='red'>模組(module)是一個</span>檔名為 *** .py的<span class='red'>python檔案</span>,這個檔案裡面定義了一些資料、函式和類別 - 當我們要使用這個module所提供的功能(資料、函式和類別)時,要使用import指令進行匯入 ```python= # ***表示modulename import *** ``` - 以Python內建的calendar module為例 ```python= import calendar print(calendar.month(2024, 6)) ``` > Output ``` June 2024 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ``` ```python= # 此函式判斷2024念是否為閏年 print(calendar.isleap(2024)) ``` >Output ``` True ``` - 如果覺得每次要import的module name太冗長,可以使用下方寫法: ```python= import calendar as cal print(cal.month(2024, 5)) print(cal.isleap(2024)) ``` >Output ``` May 2024 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ``` - 為了方便存取,我們也可以使用下方語法來從module匯入特定的class or function ```python= from modulename import classname/functionname ``` - 以Python內建的calendar module為例 ```python= from calendar import month, isleap, weekday print(month(2024, 5)) print(isleap(2024)) print(weekday(2024, 10, 5)) ``` >Output ``` May 2024 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 True 5 ``` - <span class='red'>dir( )函式可以回傳目前存取範圍內的名稱</span> ```python= from calendar import month, isleap print(dir()) ``` >Output ``` ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'isleap', 'month', 'traceback'] ``` ```python= # 可以透過*來匯入所有名稱 from calendar import * print(dir()) ``` >Output ``` ['Calendar', 'FRIDAY', 'HTMLCalendar', 'IllegalMonthError', 'IllegalWeekdayError', 'LocaleHTMLCalendar', 'LocaleTextCalendar', 'MONDAY', 'SATURDAY', 'SUNDAY', 'THURSDAY', 'TUESDAY', 'TextCalendar', 'WEDNESDAY', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'calendar', 'day_abbr', 'day_name', 'firstweekday', 'isleap', 'leapdays', 'month', 'month_abbr', 'month_name', 'monthcalendar', 'monthrange', 'prcal', 'prmonth', 'setfirstweekday', 'timegm', 'traceback', 'weekday', 'weekheader'] ``` - 如果要查看module的**路徑**和**檔名**,可以透過module的__file__屬性(attribute) ```python= import calendar as cal print(cal.__file__) ``` >Output ``` /usr/local/lib/python3.11/calendar.py ``` :::success 通常我們會透過* 匯入所有名稱,因為這在使用上會比較方便。但是匯入的名稱越多,Python的負擔就越重,因此<span class='red'>盡量匯入需要使用的部分即可</span> ::: ## 11-2 套件(package) - 相較於module是一個檔案,<span class='red'>套件(package)則是存放了數個模組</span>,有點像是一個資料夾 - 原則上只要是包含__init__.py檔案的資料夾,就會被視為Python的一個套件 ### 函式庫(Library) - Python並沒有明確定義「函式庫(Library)」,通常是將它當成模組(module)與套件(package)的統稱 - 我們通常把函式庫(Library)分成兩種類型 1. 標準函式庫(standard library) - 指的是<span class='red'>在安裝Python時一併安裝的模組(module)和套件(package),又稱「內建函式庫(build-in library)」</span> - Python有非常豐富的標準函式庫,例如**數學模組**、**檔案處理**、**資料壓縮**、**檔案格式**、**加密服務**、**作業系統服務**、**同步運算**、**網路通訊**、**網際網路資料處理**、**網際網路通訊協定**、**多媒體服務**、**圖形使用者介面**和**開發工具**等 - math, random, time, calendar, datetime, turtle等 2. 外部函式庫(external library) - <span class='red'>指需要另外安裝的模組(module)與套件(package),又稱「第三方函式庫(third-party library)」</span> :::info Python內建的thinter套件: 1. thinter(唸做th-inter),是Tool Kit Interface的簡寫 2. <span class='red'>是一個跨平台的GUI(圖形使用者介面)套件</span> 3. 能夠在UNIX, Linux, Windows, Mac等平台開發GUI程式 ::: ## 11-3 第三方套件 - 下方是常見的第三方套件: 1. NumPy:陣列與資料運算,例如矩陣運算、傳立葉變換、線性代數等。 2. Matplotlib:2D視覺化工具,可以用來繪製長條圖、直方圖、散點圖、立體圖、圓餅圖、頻譜圖、數學函數等圖形。 3. SciPy :科學計算,例如最佳化與求解、稀疏矩陣、線性代數、插值、特殊函式、統計函式、積分、傳立葉變換、訊號處理、圖像處理等。 4. pandas:資料處理與分析。 5. Django、Pyramid、Web2py、Flask: web框架,可以用來快速開發網站。 6. Kivy、Flexx、Pywin32、PyQt、WxPython: GUI程式開發。 7. BeautifulSoup: HTML/XML解析器。 8. Pillow:圖形處理。 9. PyGame:多媒體與遊戲軟體開發。 10. Requests:存取網際網路資料。 11. Scrapy:網路爬蟲套件,可以用來進行資料挖掘與統計。 12. Scikit-Learn、TensorFlow、Keras:機器學習套件。 ### 11-3-1 透過pip程式安裝第三方套件 - <span class='red'>pip程式是Python的套件管理工具,可以用來查看、安裝、升級、解除安裝與管理套件</span> - 通常pip程式會在**Scripts資料夾**中找的到 - 常見的pip指令如下: ```python= # 列出目前安裝的套件與版本 pip list # 安裝套件 pip install PACKAGENAME # 查詢已經安裝的指令 pip show PACKAGENAME # 解除安裝的套件 pip uninstall PACKAGENAME ``` :::success ```python= # 也可以從特定的套件匯入模組 from PACKAGENAME import MODULENAME ``` ::: ### 11-3-2 透過PyPI網站安裝第三方套件 - Python的第三方套件集中地: PyPI - the Python Package Index - https://pypi.org/